2011-08-17 3 views
0

У меня есть два разных файла XML, первый - это шаблон 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,,,, 
+2

У вас есть конкретный вопрос? Покажите нам, что вы сделали до сих пор, и какие проблемы вы столкнулись. –

+0

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

+0

@Naveen, что вы используете для синтаксического анализа xml? Jdom - http://www.jdom.org/ прост и удобен в использовании. Что касается получения элементов один за другим, jdom позволит вам получить список элементов, вызвав element.getChildren. Затем для каждого элемента вы можете рекурсивно вызывать тот же метод. – Heathen

ответ

2

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

+0

+1 для схемы – Wivani

0

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

b. Обратный шаблон хода

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

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

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

1

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

Читайте по обработке XML в JAVA, например:

  • here
  • и here
  • и многие другие веб-сайты и статьи и книги
Смежные вопросы