解析XML,跳过某些标记

时间:2014-10-14 15:20:47

标签: java xml

我正在关注如何在Java中解析xml的 mkyong 伟大的tutorial,但我有一种情况需要读取某些标签,但仅限于某个区域内。 e.g。

<?xml version="1.0"?>
<company>
    <staff id="1001">
        <firstname>yong</firstname>
        <lastname>mook kim</lastname>
        <nickname>mkyong</nickname>
        <salary>100000</salary>
    </staff>
    <staff id="2001">
        <firstname>low</firstname>
        <lastname>yin fong</lastname>
        <nickname>fong fong</nickname>
        <salary>200000</salary>
    </staff>
    <changes>
        <staff id="2001">
            <firstname>low</firstname>
            <lastname>yin fong</lastname>
            <nickname>fong fong</nickname>
            <old_salary>175000</salary>
            <new_salary>200000</salary>
        </staff>
    </changes>
</company>

在教程中,它使用NodeList nList = doc.getElementsByTagName("staff");,但这会检索所有人员,包括<changes>下的人员。如何忽略<staff>下的所有<changes>代码?

由于

2 个答案:

答案 0 :(得分:1)

使用DOM解析器并不是最适合您的需求。 使用XPath queries应该会更好。 (API

例如:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    Document doc = db.parse(new File("test.xml"));

    XPath xPath =  XPathFactory.newInstance().newXPath();
    String expression = "/company/staff";

    //read a nodelist using xpath
    NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);

答案 1 :(得分:0)

当您应用要保存的项目时,如果它处于更改状态,您可以尝试捕获它,然后忽略它。前

 if(company.changes != null)
{
//skip saving this node

}