Каков эффективный способ программного создания W3C DOM на Java?

Хотя я знаю, как построить DOM долгим и трудным способом с использованием DOM API, я хотел бы сделать что-то немного лучше этого. Есть ли приятный аккуратный способ создания иерархических документов, скажем, с помощью API, который работает как API критериев Hibernate? Чтобы я мог объединить вызовы в цепочку, например, так:

Document doc = createDocumentSomehow ();
doc.createElement ("root").createElements (
    doc.newElement ("subnode")
        .createElement ("sub-subnode")
            .setText("some element text")
            .addAttribute ("attr-name","attr-value"),
    doc.newElement ("other_subnode"));

В идеале это должно было бы привести к такому XML:

<root>
  <subnode>
    <sub-subnode attr-name = "attr-value">some element text</sub-subnode>
  <other_subnode />
</root>

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

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

Ответы 4

Я настоятельно рекомендую XOM API Эллиотта Расти Гарольда.

Он взаимодействует с W3C API в том смысле, что вы можете конвертировать между XOM и DOM. API всегда гарантирует правильную структуру. Он производительный, надежный и следует последовательным принципам проектирования.

Ответ принят как подходящий

Вы определенно хотите использовать JDom: http://www.jdom.org/docs/apidocs/. Его можно использовать, как вы описали, поскольку многие методы возвращают ссылку на this. Вот код, который наш учитель показал нам для этого XML-документа. Не тестировал, но учитель отличный, верю в него:

<adressbuch aktualisiert = "1.4.2008">
    <adresse>
        <vorname> Hugo </vorname>
        <nachname> Meier </nachname>
        <telefon typ = "mobil">0160/987654 </telefon>
    </adresse>
</adressbuch>

Код:

new Document(
     new Element ("adressbuch")
     .setAttribute("aktualisiert", "1.4.2008")
     .addContent(
         (Element) new Element("adresse")
         .addContent(
                     (Element) new Element("vorname")
                     .addContent("Hugo"))
         .addContent(
                     (Element) new Element("nachname")
                     .addContent("Meier"))
         .addContent(
                     (Element) new Element("telefon")
                     .setAttribute("typ", "mobil")
                     .addContent("0160/987654"))));

Судя по руководству по API, слепки, которые он делал, не нужны. Может, он просто сделал это для документации.

Попробуйте посмотреть руководство Быстрый старт для DOM4J. Это также упрощает получение XML. Я включил соответствующий фрагмент:

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class Foo {

    public Document createDocument() {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement( "root" );

        Element author1 = root.addElement( "author" )
            .addAttribute( "name", "James" )
            .addAttribute( "location", "UK" )
            .addText( "James Strachan" );

        Element author2 = root.addElement( "author" )
            .addAttribute( "name", "Bob" )
            .addAttribute( "location", "US" )
            .addText( "Bob McWhirter" );

        return document;
    }
}

Если вы хотите использовать Groovy в своем приложении Java, вы можете использовать MarkupBuilder для создания Agile XML.

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