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

StackOverflow https://stackoverflow.com/questions/24866

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Удачи.

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

XML — это сложно.Самостоятельный анализ — плохая идея, еще худшая идея — генерировать контент самостоятельно.Взгляните на спецификацию Xml 1.1.

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

Изучите набор инструментов, их много.

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

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

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

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

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

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

Да.

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

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

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

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

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

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

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

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

На первой странице гугл находит из Испании (пример испанского 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top