Существует много вопросов, которые спрашивают лучший синтаксический анализатор XML, я интересуюсь больше тем, каков синтаксический анализатор XML, который больше всего похож на Groovy для Java?
Я хочу:
SomeApiDefinedObject o = parseXml( xml );
for( SomeApiDefinedObject it : o.getChildren() ) {
System.out.println( it.getAttributes() );
}
Самые важные вещи состоят в том, что я не хочу создавать класс для каждого типа узла XML, я просто имел бы дело с ними всеми как строки, и что создание XML не требует никаких преобразователей или чего-либо, просто простой объект, который уже определяется
При использовании синтаксического анализатора XML Groovy Вы будете знать то, о чем я говорю
С другой стороны, для меня было бы лучше просто использовать Groovy от Java?
Вот кое-что, что вы можете быстро сделать с Sun Java Streaming XML Parser
FileInputStream xmlStream = new FileInputStream(new File("myxml.xml"));
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(xmlStream);
while(reader.hasNext()){
reader.next();
for(int i=0; i < reader.getAttributeCount(); i++) {
System.out.println(reader.getAttributeName(i) + "=" + reader.getAttributeValue(i));
}
}
Я настоятельно рекомендую JAXB . Отлично подходит для фреймворка XML <--> Java-объектов.
Я работаю с Dozer и Castor для получения OTOM (Object to Object Mapping).
У меня хороший опыт работы с XStream . Это довольно быстро и будет сериализовать и десериализовать Java в / из XML без схемы и с очень небольшим кодом It Just Works ™. Создаваемые им иерархии объектов Java будут напрямую отражать ваш XML.
Похоже, все, что вам нужно, это простой DOM API, например, предоставляемый dom4j . На самом деле API DOM уже есть в стандартной библиотеке (пакеты org.w3c.dom
), но это только API, поэтому вам нужна отдельная реализация - можно также использовать что-то более продвинутое, например dom4j .
Используйте Groovy.
Похоже, что ваша основная цель - получить доступ к DOM «естественным» способом через средства доступа к объектам, а Java не позволит вам сделать это без определения классов. Groovy, потому что он «утиный», позволит вам это сделать.
Единственная причина не использовать Groovy состоит в том, что (1) обработка XML является очень небольшой частью вашего приложения и / или (2) вам приходится работать с другими людьми, которые могут захотеть программировать строго на Java.
Что бы вы ни делали, не решайте «просто обращаться со всеми ними как с строками». XML - это непростой формат, и, если вы не знаете спецификацию как внутри, так и снаружи, вы вряд ли поймете ее правильно. Это означает, что ваш XML будет отклонен синтаксическими анализаторами, соответствующими спецификации.
Раньше был очень маленький и простой XML-анализатор под названием NanoXML. Кажется, что он больше не разрабатывается, но он все еще доступен по адресу http://devkix.com/nanoxml.php