Обязательно ли использовать библиотеки для работы с XML? - PullRequest
11 голосов
/ 24 августа 2008

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

Ответы [ 11 ]

11 голосов
/ 24 августа 2008

Это не существенно, но желательно. Однако, если у вас работает манипуляция со строками, сделайте это! Существует множество случаев, когда небольшой или простой текст XML можно безопасно создавать вручную.

Просто помните, что создавать текст XML сложнее, чем кажется. Вот некоторые критерии, которые я бы рассмотрел:

  • Во-первых: какой контроль имеется у вас в информации, поступающей в xml?

Чем меньше у вас контроля над исходными данными, тем больше вероятность возникновения проблем и тем более выгодной становится библиотека. Например: (а) Можете ли вы гарантировать , что в именах элементов никогда не будет символа, недопустимого в имени? (б) Как насчет кавычек в содержании атрибута? Могут ли они случиться, и вы справляетесь с ними? (c) Содержит ли когда-либо в данных что-либо, что может потребоваться закодировать как сущность (например, меньшее, чем то, которое часто нужно выводить как & lt; ); Вы делаете это правильно?

  • Во-вторых, удобство сопровождения: является ли код, который создает XML, легким для понимания кем-то другим ?

Вы, вероятно, не хотите застрять с кодом на всю жизнь. Я работал с подержанным кодом C ++, который вручную строит XML, и он может быть на удивление неясным. Конечно, если это ваш личный проект, вам не нужно беспокоиться о «других»: замените «через год» на «другие» выше.

Я бы не стал беспокоиться о производительности. Если ваш XML достаточно прост, чтобы вы могли написать его вручную, любые издержки из библиотеки, вероятно, не имеют смысла. Конечно, ваш случай может отличаться, но вы должны сначала доказать это.

Наконец, да; вы можете вручную создавать XML-текст, если он достаточно прост; но незнание доступных библиотек вероятно не правильная причина.

Современная библиотека XML - довольно мощный инструмент, но он также может быть пугающим. Тем не менее, изучение основ вашей библиотеки XML не так сложно, и это может быть довольно удобно; кроме всего прочего, это почти что необходимо на современном рынке труда. Только не увязайте в пространствах имен, схемах и других причудливых функциях, пока не получите необходимые сведения.

Удачи.

7 голосов
/ 24 августа 2008

XML сложно. Разбор себя - плохая идея, еще хуже - создавать контент самостоятельно. Взгляните на спецификацию Xml 1.1.

Вам приходится иметь дело с такими вещами, как правильное кодирование, кодирование атрибутов (например, создает недопустимый XML), правильное экранирование CDATA, кодировка UTF, пользовательские объекты DTD, и это без добавления пространств имен mix xml с пространством имен по умолчанию / пустым , атрибуты пространства имен и т. д.

Изучите инструментарий, есть много доступных.

3 голосов
/ 24 августа 2008

Я думаю, что пользовательские манипуляции со строками - это хорошо, но вы должны помнить о двух вещах:

  1. Ваш код не такой зрелый, как библиотека. Выделите время в своем плане для обработки всплывающих ошибок.
  2. Ваш подход, вероятно, не будет масштабироваться так же хорошо, как сторонняя библиотека, когда xml начнет расти (как с точки зрения производительности, так и простоты использования).

Я знаю кодовую базу, которая использует пользовательские манипуляции со строками для вывода XML (и стороннюю библиотеку для ввода). Это было хорошо для начала, но через некоторое время стало настоящей проблемой.

2 голосов
/ 09 апреля 2009

Да.

Нет смысла пропускать необходимый инструмент: даже написание xml нетривиально с необходимостью избегать этих амперсандов и lts, ​​не говоря уже о привязках пространства имен (при необходимости). И, наконец, библиотеки в целом могут читать и писать xml не только более надежно, но и более эффективно (особенно для Java).

Но вы, возможно, искали неправильные инструменты, если они кажутся слишком сложными. Привязка данных с использованием JAXB или XStream проста; но для простого прямого вывода XML я использую StaxMate . На самом деле это может упростить задачу многими способами (автоматически закрывает начальные теги, записывает объявления пространства имен, если нужно и т. Д.).

2 голосов
/ 24 августа 2008

Не используя библиотеку, вы рискуете генерировать или анализировать данные, которые не являются правильно сформированными, что рано или поздно произойдет . По той же причине document.write не разрешено в XHTML, вы не должны писать разметку XML в виде строки.

2 голосов
/ 24 августа 2008

Да, используйте библиотеку.

Кто-то потратил время и силы на создание чего-то, что обычно лучше, чем то, что вы могли бы придумать. Манипулирование строками предназначено для отправки назад одного узла, но как только вам понадобится манипулировать DOM или использовать запрос XPath, библиотека спасет вас.

1 голос
/ 26 августа 2008

Единственный раз, когда я делал что-то подобное в производственном коде, это когда мы с коллегой создавали препроцессор, чтобы мы могли вставлять фрагменты XML из других файлов в больший XML. При загрузке мы сначала анализируем эти встраивания (ссылки на файлы в строках комментариев XML) и заменяем их фактическим фрагментом, на который они ссылаются. Затем мы передадим объединенный результат анализатору XML.

1 голос
/ 24 августа 2008

Вам не нужно использовать библиотеку для разбора XML, но посмотрите на этот вопрос
Какие соображения следует учитывать перед повторным изобретением колеса?
прежде чем вы начнете писать свой собственный код для разбора / генерации XML.

1 голос
/ 24 августа 2008

Нет - если вы можете разобрать его самостоятельно (как вы делаете), и он будет масштабироваться для ваших нужд, вам не нужна никакая библиотека.

Просто убедитесь, что ваши будущие потребности будут удовлетворены - сложное создание xml лучше выполнять с использованием библиотек - некоторые из них также имеют очень простые варианты.

0 голосов
/ 24 августа 2008

Я не думаю, что использовать DOM XML API, который поставляется с JDK, сложно, легко создавать узлы, атрибуты и т. Д. Элементов, а потом легко конвертировать строки в документ DOM или документы DOM в Строка

На первой странице 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...