Как разобрать XML с помощью XmlPullParser - PullRequest
3 голосов
/ 04 ноября 2011

Я хочу использовать Java XmlPullParser для синтаксического анализа XML-файла следующим образом:

<start>
    <tag1> text1 </tag1>
    <tag2> 
        <tag3>text3</tag3>
        <tag1>text4</tag1>
    </tag2>
    <tag4> text5</tag4>
</start>

В качестве результата я хочу только <tag1> text1 </tag1>Мой текущий метод производит и <tag1> text1 </tag1> и <tag1>text4<tag1/>.Что еще я должен сделать?

Редактировать:

Я получаю XML в формате String.Я хочу разобрать это используя org.xmlpull.v1.XmlPullParser;.

Ответы [ 4 ]

9 голосов
/ 04 ноября 2011

Вы также можете просто использовать javax.xml.xpath API:

import java.io.FileReader;
import javax.xml.xpath.*;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;

public class XPathDemo {

    public static void main(String[] args) throws Exception {
        XPathFactory xpf = XPathFactory.newInstance();
        XPath xpath = xpf.newXPath();
        InputSource xml = new InputSource(new FileReader("input.xml"));
        Node result = (Node) xpath.evaluate("/tag1", xml, XPathConstants.NODE);
        System.out.println(result);
    }

}
5 голосов
/ 04 ноября 2011

У каждого свои предпочтения по обработке XML в Java, и я предпочитаю использовать JAXB при работе с XML в Java, потому что мне проще использовать этот прямой xpath.

1 голос
/ 04 ноября 2011

Вы можете сделать это, используя Java Xpath API

0 голосов
/ 04 ноября 2011

попробуйте использовать библиотеку dom4j

    InputStream is = FileUtils.class.getResourceAsStream(filepath);
    SAXReader reader = new SAXReader();
    org.dom4j.Document doc = reader.read(is);
    is.close();
    Element content = doc.getRootElement();
    List<Element> els = content.elements("elemeNtname");

, после этого в методе вы получите в списке els все элементы в xml-файле с именем "elemeNtname".

...