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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
0
715
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

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

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

  1. Ваш код не такой зрелый, как библиотека. Выделите в своем плане время для обработки всплывающих ошибок.
  2. Ваш подход, вероятно, не будет масштабироваться так же, как сторонняя библиотека, когда 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;
}

Судя по этому примеру (и другим), использование API, поставляемых с JDK, тоже не выглядит особенно простым! Внешняя библиотека XML, такая как XOM или dom4j, может значительно упростить задачу.

Jonik 06.06.2009 15:04
Ответ принят как подходящий

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

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

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

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

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

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

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

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

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

Удачи.

Один из самых логичных и продуманных ответов по XML, которые я читал за долгое время.

Mike Clark 24.11.2009 19:07

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

jtahlborn 14.03.2011 20:01

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. На самом деле это может упростить задачу разными способами (автоматически закрывает начальные теги, при необходимости записывает объявления пространств имен и т. д.).

Другие вопросы по теме