2015-08-18 3 views
-1

Я разбираю сложный XML-файл, и я хочу получить ВСЕ атрибуты и его значения из всего документа, используя предпочтительно XPath в Java. Проблема заключается в том, что документ содержит много вложенных тегов в структуре дерева, поэтому это сложно. Если есть еще один более простой способ сделать это на Java, который также будет полезен. Я попробовал DOM уже, но множественное вложение затрудняет этот подход.Получить все атрибуты XML-файла с помощью XPath в Java

В качестве примера, если у меня есть это:

<bookstore> 
<book category="COOKING"> 
    <title lang="en">Everyday Italian</title> 
    <author>Giada De Laurentiis</author> 
    <year>2005</year> 
    <price>30.00</price> 
</book> 
<book category="CHILDREN"> 
    <title lang="en">Harry Potter</title> 
    <author>J K. Rowling</author> 
    <year>2005</year> 
    <price>29.99</price> 
</book> 
<book category="WEB"> 
    <title lang="en">XQuery Kick Start</title> 
    <author>James McGovern</author> 
    <author>Per Bothner</author> 
    <author>Kurt Cagle</author> 
    <author>James Linn</author> 
    <author>Vaidyanathan Nagarajan</author> 
    <year>2003</year> 
    <price>49.99</price> 
</book> 
<book category="WEB"> 
    <title lang="en">Learning XML</title> 
    <author>Erik T. Ray</author> 
    <year>2003</year> 
    <price>39.95</price> 
</book> 
</bookstore> 

Я хочу это:

category : COOKING 
lang : en 
category : CHILDREN 
lang : en 
category : WEB 
lang : en 
category : WEB 
lang : en 

Спасибо.

ответ

0

Если вы не заботитесь о вложенной структуре (т. Е. Просто хотите получить список атрибутов), просто использовать SAX.

Например, вы можете создать подкласс DefaultHandler, перекрывая метод startElement собрать Attributes от каждого тега:

class GetAttributesHandler extends DefaultHandler { 
    List<Attributes> attributes = new ArrayList<>(); 

    @Override 
    public void startElement(String uri, String localName, String qName, Attributes attributes) { 
    this.attributes.add(attributes); 
    } 
}