2015-06-08 2 views
6

Моей структура файла XML, как этоКак я могу получить определенные узлы из XML с помощью XPath в Java?

<?xml version="1.0" encoding="utf-8" ?> 
<book> 
    <chapters> 
     <chapter id="1"> 
      <page id="1" cid= "1" bid = "Book1"> 
       <text>Hi</text> 
      </page> 
      <page id="2" cid= "1" bid = "Book1"> 
       <text>Hi</text> 
      </page> 
     </chapter> 
     <chapter id="2"> 
      <page id="1" cid= "2" bid = "Book1"> 
       <text>Hi</text> 
      </page> 
      <page id="2" cid= "2" bid = "Book1"> 
       <text>Hi</text> 
      </page> 
     </chapter> 
     <chapter id="3"> 
      <page id="1" cid= "3" bid = "Book1"> 
       <text>Hi</text> 
      </page> 
      <page id="2" cid= "3" bid = "Book1"> 
       <text>Hi</text> 
      </page> 
     </chapter> 
    </chapters> 
</book> 

Я хочу, чтобы получить конкретный узел страницы пропускания идентификатора страницы и глава ID. Как я могу это достичь?

Кроме того, книжный узел содержит слишком много главы, и каждая глава содержит много страниц. Итак, я использую синтаксический анализатор SAX для анализа содержимого.

+0

Нет поддержки xpath в SAX? : [Может ли SAX Parsers использовать XPath в Java?] (Http://stackoverflow.com/questions/8791600/can-sax-parsers-use-xpath-in-java) – har07

+0

Я не верю, что вы можете запросить использование xpath с помощью SAX, потому что документ не полностью сохраняется в памяти в любое время. Разумеется, вы можете хранить список разделов и страниц в некоторой структуре данных во время разбора. Можете ли вы опубликовать свой код SAX? –

+3

@ har07 Спасибо за ваше обновление. Я буду использовать DOM Parser. Не могли бы вы предоставить мне решение, используя DOM? – Krish

ответ

3

«Как получить определенные узлы из XML с помощью XPath в Java?»

Я не очень хорошо знакомы с Java и Android, но XPath, чтобы получить конкретные page из вашего образца XML, передавая page id и chapter id должен выглядеть примерно так:

//chapter[@id='chapter_id_here']/page[@id='page_id_here'] 

краткое описание:

  • //chapter: найти chapter элемент в любом месте в XML ...
  • [@id='chapter_id_here']: ... где id значение атрибута равно определенного раздела ID
  • /page: от каждого из отфильтрованных chapter элементов, найти дочерний элемент page ...
  • [@id='page_id_here']: ... где id значение атрибута равно конкретную страницу ID

Вы можете следить за этими потоками для реализации выполнить выражение XPath в Java: How to read XML using XPath in Java, а в Android: Search in XML File with XPath in Android

+0

Как я могу указать несколько фильтров для страницы? Правильный ли формат ниже? // page [@ id = '2' && @ cid = '1' && bid = 'Book 1'] – Krish

+1

'&&' operator in xpath is 'and':' // page [@ id = '2 'и @ cid =' 1 'и @ bid =' Book 1 '] ' – har07

Смежные вопросы