Извлечение значения узлов из XML - PullRequest
0 голосов
/ 17 августа 2011

У меня есть два разных XML-файла, первый - это шаблон xml, а второй - фактический xml. Шаблон xml содержит только элементы, в то время как фактический xml содержит некоторые элементы, присутствующие в шаблоне xml, как показано ниже в файлах xml. Для каждого элемента, присутствующего в шаблоне xml, я хочу посмотреть на фактический xml и посмотреть, присутствует ли этот элемент и, если да, то извлечь его значение и распечатать или просто распечатать пустое пространство, как показано в выходных данных

template.xml

<personinfo>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
   <person>
     <name><name>
     <age></age>
     <address>
     <street></street>
     <city></city>
     <address>
   </person>
</personinfo>

Actual.xml

<personinfo>
   <person>
     <name>tom<name>
     <age>26</age>
     <address>
     <street>main street</street>
     <city>washington</city>
     <address>
   </person>
   <person>
     <name>mike<name>
     <age>30</age>
     <address>
     <street>first street</street>
     <city>dallas</city>
     <address>
   </person>
</personinfo>

Ожидаемый результат

tom,26,main street,washington,mike,30,first street,dallas,,,,

Ответы [ 3 ]

2 голосов
/ 17 августа 2011

Сначала вы должны определить схему для XML, а не шаблон. Далее вы можете создать Java-бин Person. Это можно сопоставить каждому человеку с помощью JAXB. В прошлом для меня это был самый быстрый способ разбора XML. http://jaxb.java.net/

1 голос
/ 17 августа 2011

Пример довольно маленький, поэтому это может и не быть проблемой (пока), но я бы предпочел SAX вместо DOM для анализа содержимого XML. Очень легко получить выводимый контент событий, если он найден.

Ознакомьтесь с обработкой XML в JAVA, например:

0 голосов
/ 17 августа 2011

а.Разобрать оба документа в DOM

b.Шаблон рекурсивного обхода

c.(вариант 1) Для каждого найденного элемента создайте xpath (использовать стек и push / pop?)

d.(вариант 1) запустите xpath для actual.xml

c.(вариант 2) Рекурсивный просмотр фактического одновременно с шаблоном.Если элемент не найден, прекратите проходить глубже в шаблон.

...