Ответ 1
Я рекомендую XOM. Его API ясен и интуитивно понятен.
Есть ли простой способ читать и писать Xml в Java?
Я использовал парсер SAX раньше, но я помню, что это было неинтуитивно, я просмотрел несколько руководств для JAXB, и это выглядит просто сложно.
Я не знаю, был ли я испорчен классом класса С# XmlDocument, но все, что я хочу сделать, это создать XML-документ, представляющий набор классов и их членов (некоторые из них являются атрибутами, некоторые из которых являются элементами).
Я бы посмотрел на сериализацию, но XML должен иметь тот же формат, что и вывод приложения С#, который я перерабатываю в Java.
Я рекомендую XOM. Его API ясен и интуитивно понятен.
Вы должны проверить Xstream. Существует 2-минутный учебник, который действительно простой. Чтобы получить тот же формат, вы бы моделировали классы одинаково.
Если вы используете jdk 1.4 или newer, посмотрите XMLEncoder класс.
Некоторые из наиболее популярных подходов к рассмотрению:
JAXB - это спецификация стандартного связывания XML. Если у вас уже есть XSD, он может генерировать ваши Java-классы для вас, а затем все, что осталось, - использовать стандартный API для сортировки/разборки.
Как и в JAXB, эти подходы используют XML-привязные конфигурации. Они могут обеспечить более мелкозернистый контроль процесса без сортировки.
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" );
Самым простым способом пока является MarkupBuilder в Groovy. Подумайте о Groovy как о новом синтаксисе для Java. XmlSlurper можно использовать для чтения XML.
Я думаю, что Apache XMLBeans предоставляет функциональные возможности, которые вы используете.
страница Wikipedia дает хороший обзор и использование примера.
Существует широкий выбор вариантов обработки XML для Java, хотя, судя по документации .NET для XmlDocument, Реализация Java DOM - это самый близкий эквивалент из коробки.
.NET XmlDocument:
Этот класс реализует документ W3C Объектная модель (DOM) Уровень 1 Ядро и Core DOM Level 2.
Java Document:
См. также базовую спецификацию уровня объектной модели документа (DOM).
Пример кода:
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;
}
Я думаю, что JAXB сложнее, если вы посмотрите на неправильные примеры. В частности, да, способ, основанный на схеме, может стать беспорядочным. Но основанный на кодах, основанный на аннотации, тривиально легко.
Другой простой альтернативой является XStream. И для необязательного случая StaxMate, который является надстройкой для потоковых парсеров Stax.
Если SAX-анализ является обязательным, JAXP является хорошим выбором. Я предпочитаю DOM-анализ и использовать jdom, который мне намного легче.
Я бы, конечно, использовал XOM, если вы хотите использовать DOM-подобный подход и SAX (www.sax.org), если вы хотите использовать SAX-подобный подход. Я был вовлечен в раннюю разработку XML и SAX был разработан как ориентированный на события подход, который полезен для некоторых приложений. DOM/XOM и SAX дополняют друг друга - иногда вам нужен один, а иногда и другой. Если вы хотите строить объекты по ходу, а не читать все в памяти, используйте SAX. Если вы счастливы прочитать все, а затем обработать его, используйте XOM.
Я потратил слишком много времени, пытаясь заставить W3C DOM работать - IMO плохо определяется слишком многими способами делать что-то и недостаточно для других. Когда XOM пришел, он произвел революцию в моей производительности.
Сообщество XOM очень хорошо осведомлено и сфокусировано и полезно.