Сведения о вопросе

Oleksandrop

14:25, 25th August, 2020

Теги

java   xml    

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

Просмотров: 448   Ответов: 11

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



  Сведения об ответе

VERSUION

13:56, 28th August, 2020

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

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

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

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

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

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

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

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

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

Удачи.


  Сведения об ответе

dump

23:51, 17th August, 2020

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

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

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


  Сведения об ответе

DINO

22:50, 25th August, 2020

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

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

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


  Сведения об ответе

baggs

03:17, 13th August, 2020

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

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


  Сведения об ответе

davran

05:38, 22nd August, 2020

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


  Сведения об ответе

piter

09:14, 1st August, 2020

Да.

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

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


  Сведения об ответе

FAriza

02:00, 25th August, 2020

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

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


  Сведения об ответе

Chhiki

12:23, 12th August, 2020

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


  Сведения об ответе

repe

21:06, 1st October, 2020

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


  Сведения об ответе

piter

02:40, 7th August, 2020

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


  Сведения об ответе

9090

06:36, 5th August, 2020

Я не думаю, что использование DOM XML API, которое поставляется с JDK, сложно, легко создавать узлы элементов, атрибуты и т. д... и позже легко конвертировать строки в документ DOM sor 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;
}


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться