Я использую серверную часть Java для создания строки XML, которая передается в браузер. В настоящее время я использую простые строковые манипуляции для создания этого XML. Обязательно ли использовать некоторую XML-библиотеку в Java для создания XML-строки? Я считаю, что библиотеки очень трудны в использовании по сравнению с тем, что мне нужно.




Нет. Если вы можете разобрать его самостоятельно (как вы это делаете) и он будет масштабироваться в соответствии с вашими потребностями, вам не понадобится какая-либо библиотека.
Просто убедитесь, что ваши будущие потребности будут удовлетворены - сложное создание xml лучше выполнять с помощью библиотек, некоторые из которых также имеют очень простые разновидности.
Я думаю, что настраиваемые манипуляции со строками - это нормально, но вы должны помнить о двух вещах:
Я знаю кодовую базу, которая использует настраиваемые строковые манипуляции для вывода xml (и стороннюю библиотеку для ввода). Поначалу это было нормально, но через некоторое время стало настоящей проблемой.
Да, воспользуйтесь библиотекой.
Кто-то потратил время и силы на создание чего-то, что обычно лучше, чем то, что вы могли придумать. Манипуляции со строками предназначены для отправки обратно одного узла, но как только вам понадобится манипулировать DOM или использовать запрос XPath, библиотека спасет вас.
Нет - особенно для генерации (синтаксический анализ я бы менее склонен, поскольку вводимый текст всегда может вас удивить). Я думаю, что это нормально, но будьте готовы перейти на библиотеку, если вы обнаружите, что тратите больше нескольких минут на поддержание собственного кода.
Я не думаю, что использовать DOM XML API, который поставляется с JDK, сложно, легко создавать узлы Element, атрибуты и т. д., А позже легко преобразовывать строки в документ DOM или документы DOM в String
На первой странице Google находит из Испании (пример испанского XML):
public String DOM2String(Document doc)
{
TransformerFactory transformerFactory =TransformerFactory.newInstance();
Transformer transformer = null;
try{
transformer = transformerFactory.newTransformer();
}catch (javax.xml.transform.TransformerConfigurationException error){
coderror=123;
msgerror=error.getMessage();
return null;
}
Source source = new DOMSource(doc);
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
try{
transformer.transform(source,result);
}catch (javax.xml.transform.TransformerException error){
coderror=123;
msgerror=error.getMessage();
return null;
}
String s = writer.toString();
return s;
}
public Document string2DOM(String s)
{
Document tmpX=null;
DocumentBuilder builder = null;
try{
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
}catch(javax.xml.parsers.ParserConfigurationException error){
coderror=10;
msgerror = "Error crando factory String2DOM "+error.getMessage();
return null;
}
try{
tmpX=builder.parse(new ByteArrayInputStream(s.getBytes()));
}catch(org.xml.sax.SAXException error){
coderror=10;
msgerror = "Error parseo SAX String2DOM "+error.getMessage();
return null;
}catch(IOException error){
coderror=10;
msgerror = "Error generando Bytes String2DOM "+error.getMessage();
return null;
}
return tmpX;
}
Это не обязательно, но желательно. Однако, если у вас работает манипуляция со строками, дерзайте! Существует множество случаев, когда небольшой или простой текст XML можно безопасно создать вручную.
Просто имейте в виду, что создать текст XML сложнее, чем кажется. Вот несколько критериев, которые я бы рассмотрел:
Чем меньше вы контролируете исходные данные, тем больше вероятность возникновения проблем и тем более выгодной становится библиотека. Например: (a) Можете ли вы гарантия, что имена элементов никогда не будут содержать недопустимый символ в имени? (б) Как насчет кавычек в содержании атрибута? Могут ли они случиться, и вы справляетесь с ними? (c) Содержат ли данные когда-либо что-либо, что может потребоваться закодировать как юридическое лицо (например, меньшее, чем которое часто необходимо выводить как <); ты делаешь это правильно?
Вероятно, вы не хотите зацикливаться на коде на всю жизнь. Я работал с подержанным кодом C++, который вручную создает XML, и он может быть на удивление непонятным. Конечно, если это ваш личный проект, то вам не нужно беспокоиться о «других»: замените «через год» на «другие» выше.
Я бы не стал беспокоиться о производительности. Если ваш XML достаточно прост, чтобы вы могли написать его от руки, любые накладные расходы библиотеки, вероятно, бессмысленны. Конечно, ваш случай может быть другим, но вы должны сначала измерить, чтобы доказать это.
Наконец, да; вы можете вручную создать XML-текст, если это достаточно просто; но незнание доступных библиотек - наверное не правильная причина.
Современная библиотека XML - довольно мощный инструмент, но он также может быть пугающим. Однако изучить основы вашей XML-библиотеки не так сложно, и это может быть весьма удобно; среди прочего, это почти обязательное условие на сегодняшнем рынке труда. Только не увязайте в пространствах имен, схемах и других интересных функциях, пока не получите самое необходимое.
Удачи.
Один из самых логичных и продуманных ответов по XML, которые я читал за долгое время.
К сожалению, ваш пост хорошо продуман и интеллектуален, но средний новичок прочитает его и подумает: «Круто, я могу сделать это сам для своего« простого »случая» ... Катастрофа. Лично я думаю, что единственные люди, которые должны заниматься «простым» построением строк, - это люди, у которых уже хорошо разбирается в технологии и связанных библиотеках.
Xml - это сложно. Самостоятельный анализ - плохая идея, еще хуже - создавать контент самостоятельно. Взгляните на спецификацию Xml 1.1.
Вам нужно иметь дело с такими вещами, как правильная кодировка, кодировка атрибутов (например, создает недопустимый xml), правильное экранирование CDATA, кодировка UTF, настраиваемые объекты DTD, и это без добавления смешанных пространств имен xml с пространством имен по умолчанию / пустым, атрибутами пространства имен , так далее.
Изучите набор инструментов, их много.
Не используя библиотеку, вы рискуете сгенерировать или проанализировать неверно сформированные данные, что рано или поздно произойдет. По той же причине, по которой document.write не разрешен в XHTML, вы не должны записывать разметку XML в виде строки.
Вам не обязательно использовать библиотеку для синтаксического анализа XML, но посмотрите этот вопрос
На что следует обратить внимание, прежде чем изобретать велосипед?
прежде чем вы начнете писать собственный код для синтаксического анализа / генерации xml.
Единственный раз, когда я сделал что-то подобное в производственном коде, был, когда мы с коллегой создали препроцессор, чтобы мы могли встраивать фрагменты XML из других файлов в более крупный XML. При загрузке мы сначала анализируем эти вставки (ссылки на файлы в строках комментариев XML) и заменяем их фактическим фрагментом, на который они ссылаются. Затем мы передаем объединенный результат в XML-синтаксический анализатор.
Да.
Нет смысла пропускать важный инструмент: даже писать xml нетривиально, ведь нужно избегать этих амперсандов и lts, не говоря уже о привязках пространств имен (при необходимости). И, в конце концов, библиотеки обычно могут читать и писать xml не только более надежно, но и более эффективно (особенно для Java).
Но, возможно, вы искали неправильные инструменты, если они кажутся слишком сложными. Связывание данных с использованием JAXB или XStream очень просто; но для простого прямого вывода XML я использую StaxMate. На самом деле это может упростить задачу разными способами (автоматически закрывает начальные теги, при необходимости записывает объявления пространств имен и т. д.).
Судя по этому примеру (и другим), использование API, поставляемых с JDK, тоже не выглядит особенно простым! Внешняя библиотека XML, такая как XOM или dom4j, может значительно упростить задачу.