Простой способ сделать XML в Java - PullRequest
28 голосов
/ 09 февраля 2009

Есть ли простой способ читать и писать Xml на Java?

Ранее я использовал SAX-парсер, но помню, что он не интуитивно понятен, я посмотрел пару уроков для JAXB, и это выглядит просто сложно.

Я не знаю, был ли я испорчен классом Cml XmlDocument, но все, что я хочу сделать, - это создать документ Xml, представляющий набор классов и их членов (некоторые являются атрибутами, некоторые являются элементами).

Я бы посмотрел на сериализацию, но XML должен иметь тот же формат, что и выходные данные приложения c #, которое я реверс-инжиниринг в Java.

Ответы [ 11 ]

15 голосов
/ 09 февраля 2009

Я рекомендую XOM . Его API понятен и интуитивно понятен.

8 голосов
/ 09 февраля 2009

Вы должны проверить Xstream . Существует 2-минутное учебное пособие, которое действительно просто . Чтобы получить тот же формат, вы должны смоделировать классы одинаково.

3 голосов
/ 09 февраля 2009

Dom4j - простой API для создания XML-документов в Java.

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

Element author2 = root.addElement( "author" )
  .addAttribute( "name", "Toby" )
  .addAttribute( "location", "Germany" )
  .addText( "Tobias Rademacher" );
3 голосов
/ 09 февраля 2009

Некоторые из наиболее популярных подходов к рассмотрению:

Архитектура Java для привязки XML

JAXB - это спецификация для стандартной привязки XML. Если у вас уже есть XSD, он может сгенерировать ваши классы Java для вас, и тогда все, что осталось, - это использовать стандартный API для маршалинга / демаршаллинга.

  • Ссылочная реализация от Glassfish
  • Реализация Apache JaxMe

Другие подходы к связыванию

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

Раскатайся

  • Использование StAX
  • Использование XOM
  • Использование простого XPath
3 голосов
/ 09 февраля 2009

Если вы используете jdk 1.4 или новее, взгляните на XMLEncoder class.

2 голосов
/ 09 февраля 2009

Существует широкий выбор вариантов обработки XML для Java, хотя, судя по документации .NET для XmlDocument , реализация Java DOM является ближайшей коробочный эквивалент.

.NET XmlDocument :

Этот класс реализует документ W3C Объектная модель (DOM) уровня 1 Core и Основной DOM уровня 2.

Java Документ :

См. Также Базовую спецификацию объектной модели документа (DOM) уровня 3.

Пример кода:

public static void main(String[] args) throws Exception {
    File xmlFile = new File(".classpath");

    // read it
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(xmlFile);

    // walk it
    System.out.println("Node count=" + countNodes(document));

    // write it
    Source source = new DOMSource(document);
    Result result = new StreamResult(System.out);
    TransformerFactory transformerFactory = TransformerFactory
            .newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    transformer.transform(source, result);
}

/** Doesn't count attributes, etc */
private static int countNodes(Node node) {
    int count = 0;

    NodeList kids = node.getChildNodes();
    count += kids.getLength();
    for (int i = 0; i < kids.getLength(); i++) {
        count += countNodes(kids.item(i));
    }

    return count;
}
2 голосов
/ 09 февраля 2009

Я думаю, что Apache XMLBeans обеспечивает функциональность, к которой вы стремитесь.

Страница Википедии дает хороший обзор и пример использования.

2 голосов
/ 09 февраля 2009

Самым простым на данный момент способом является MarkupBuilder в Groovy . Думайте о Groovy как о новом синтаксисе для Java. XmlSlurper может использоваться для чтения XML.

1 голос
/ 11 апреля 2009

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

Другая простая альтернатива - XStream . А для случая без привязки StaxMate , который является надстройкой для потоковых анализаторов Stax.

0 голосов
/ 30 июля 2009

Я бы, конечно, использовал XOM, если вы хотите DOM-подобный подход, и SAX (www.sax.org), если вы хотите SAX-подобный подход. Я принимал участие в ранней разработке XML, и SAX был разработан как подход, основанный на событиях, который полезен для некоторых приложений. DOM / XOM и SAX дополняют друг друга - иногда вам нужно одно, иногда другое. Если вы хотите строить объекты по ходу, а не читать все в память, используйте SAX. Если вы счастливы прочитать все, а затем обработать, используйте XOM.

Я потратил слишком много времени, пытаясь заставить работать DOM W3C - IMO, он плохо определен со слишком многими способами выполнения одних вещей и недостаточно для других. Когда пришел XOM, это произвело революцию в моей производительности.

Сообщество XOM очень хорошо осведомлено, сфокусировано и полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...