Обязательно ли использовать библиотеки для работы с XML?

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

24.08.2008 05:48:22
11 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

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

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

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

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

Удачи.

11
24.08.2008 07:17:49
Один из самых логичных и продуманных ответов по XML, который я читал за долгое время.
Mike Clark 24.11.2009 16:07:57
К сожалению, ваш пост хорошо продуман и интеллигентен, но средний новичок прочтет его и подумает: «Отлично, я могу сделать это сам для своего« простого »случая» ... Бедствие. Лично я думаю, что единственными людьми, которые должны заниматься «простым» построением строк, являются люди, которые уже хорошо разбираются в технологиях и связанных с ними библиотеках.
jtahlborn 14.03.2011 17:01:05

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

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

1
24.08.2008 05:50:46

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

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

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

3
24.08.2008 05:54:22

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

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

2
24.08.2008 05:56:11

Нет - особенно для генерации (к парсингу я бы меньше склонялся, так как ввод текста всегда может вас удивить). Я думаю, что это хорошо - но будьте готовы перейти к библиотеке, если вы потратите больше времени на поддержку своего кода.

0
24.08.2008 07:00:29

Я не думаю, что использовать 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;
}
0
24.08.2008 07:03:28
Судя по этому (и другим) примеру, использование API, поставляемых с JDK, также не выглядит особенно простым! Внешняя библиотека XML, такая как XOM или dom4j, может упростить задачу.
Jonik 6.06.2009 11:04:22

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

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

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

7
24.08.2008 10:07:37

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

2
24.08.2008 16:59:50

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

1
23.05.2017 12:33:27

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

1
26.08.2008 10:25:43

Да.

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

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

2
9.04.2009 06:27:57