XML子节点计数 - Java

时间:2014-07-15 13:35:43

标签: java xml

我需要在下面的示例中获取父标记<test>下面的子节点数。

因此<username><password><result> = 3的数量。

<TestData>
    <test>
        <username>test1234</username>
        <password>fake</password>
        <result>Incorrect Login or Password</result>
    </test>
    <test>
        <username>abc</username>
        <password>1234</password>
        <result/>
    </test>
</TestData>

我设法得到<test>的计数如下;

NodeList nList = doc.getElementsByTagName("test");
TEST_CASE_COUNT = nList.getLength();

现在我需要<test>

中子节点的计数

2 个答案:

答案 0 :(得分:2)

要获取特定元素中的子元素的数量,您需要考虑并非所有节点都是元素的事实。例如,您可以使用:

static int getChildElementCount(Element element) {
    int count = 0;
    NodeList childNodes = element.getChildNodes();
    for (int i = 0; i < childNodes.getLength(); i++) {
        if (childNodes.item(i).getNodeType() == Node.ELEMENT_TYPE) {
            count++;
        }
    }
    return count;
}

使用XPath可能还有一种更简单的方法来选择元素。 (我很少发现XPath是一个更简单的解决方案,但YMMV。)

答案 1 :(得分:0)

我认为你要找的是Node.getChildNodes()。您必须循环遍历<test>列表,然后计算每个孩子的子项,并随时添加它们。

NodeList nList = doc.getElementsByTagName("test"); 
int TEST_CASE_COUNT = nList.getLength();
int nodeCount = 0;
for (int i = 0; i < nList.getLength(); i++) {
    Node test = nList.item(i);
    nodeCount += test.getChildNodes().getLength();
}