获取特定节点内的所有元素

时间:2018-02-01 22:56:17

标签: java xml

我是XML解析的新手,我迷路了。首先,这是我的XML:

<?xml version="1.0" encoding="UTF-8"?>
<menu>
    <data>
        <food type="none">
            <price>100</price>
        </food>
        <food type="none">
            <price>50</price>
        </food>
    </data>

    <trash>
        <food type="none" id="1"/>
        <food type="none" id="2"/>
    </trash>
</menu>

我正在尝试解析这个XML。我想在数据中获取所有食物项目。

当我这样做时:

NodeList nUsines = doc.getElementsByTagName("food");

我还在垃圾中获得食物项目,但我不想这样。

对不起,如果我的问题听起来不对,我不知道XML的正确用语

到目前为止我的代码(在方法内):

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(file.getPath());
    doc.getDocumentElement().normalize();

    NodeList nUsines = doc.getElementsByTagName("food");

谢谢

2 个答案:

答案 0 :(得分:1)

您的代码完全符合您的要求。

您需要更具体的查询,例如food元素中的data元素。

您可以尝试选择data元素,然后在其中专门查询food元素。

或者,查看XPath,您将很快找到另一种方法来执行此操作。

答案 1 :(得分:0)

使用XPath(只是其中一个选项):

XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("//data/food");

System.out.println(((NodeList)expr.evaluate(doc, XPathConstants.NODESET)).getLength());