【问题标题】:Parsing XML, skip certain tags解析 XML,跳过某些标签
【发布时间】:2014-10-14 15:20:47
【问题描述】:

我正在关注 mkyong 的 很棒的 tutorial 关于如何在 Java 中解析 xml,但我有一种情况,我需要读取某些标签,但只能在一个区域内。例如

<?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");,但这会检索所有员工,包括&lt;changes&gt; 下的员工。如何忽略&lt;changes&gt; 下的所有&lt;staff&gt; 标签?

谢谢

【问题讨论】:

  • 看看使用 XPATH 查询。

标签: java xml


【解决方案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);

【讨论】:

    【解决方案2】:

    当您应用要保存的项目时,如果它正在更改,您可以尝试捕获它,然后忽略它。例如

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

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 2020-04-17
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2014-02-28
      • 1970-01-01
      相关资源
      最近更新 更多