Java DOM:如何获取多少个子元素

时间:2013-06-24 15:14:43

标签: java xml dom

我有一个XML文档:

<entities xmlns="urn:yahoo:cap">
    <entity score="0.988">
        <text end="4" endchar="4" start="0" startchar="0">Messi</text>
        <wiki_url>http://en.wikipedia.com/wiki/Lionel_Messi</wiki_url>
        <types>
            <type region="us">/person</type>
        </types>
    </entity>
</entities>

我有TreeMap<String,String> data存储getTextContent()"text"元素的"wiki_url"。有些"entity"只会有"text"元素(没有"wiki_url")所以我需要一种方法来找出当只有文本元素作为子元素时以及有{{1}元素时1}}。我可以使用"wiki_url"&amp; document.getElementByTag("text")然后我会失去文本和网址之间的关系。

我正在尝试使用以下内容获取document.getElementByTag("wiki_url")元素中的元素数量:

"entity"

然而如上所示,这将返回7(我不明白,如果你包括孙子,肯定是3或4) 然后,我将使用子项的数量循环遍历它们以检查是否NodeList entities = document.getElementsByTagName("entity"); //List of all the entity nodes int nchild; //Number of children System.out.println("Number of entities: "+ entities.getLength()); //Prints 1 as expected nchild=entities.item(0).getChildNodes().getLength(); //Returns 7 并将其保存到数据中,如果正确的话。

为什么当我只能算上3个孩子和1个孙子时,我得到7个孩子的数量?

1 个答案:

答案 0 :(得分:3)

> <entity score="0.988">之后的空格也计入节点,同样标签之间的行尾符号也被解析为节点。如果您对具有名称的特定节点感兴趣,请添加如下所示的帮助方法,并在任何地方调用。

Node getChild(final NodeList list, final String name)
    {
        for (int i = 0; i < list.getLength(); i++)
        {
            final Node node = list.item(i);
            if (name.equals(node.getNodeName()))
            {
                return node;
            }
        }
        return null;
    }

并致电

final NodeList childNodes = entities.item(0).getChildNodes();
final Node textNode = getChild(childNodes, "text");
final Node wikiUrlNode = getChild(childNodes, "wiki_url");

通常在使用DOM时,请使用上面的辅助方法来简化主处理逻辑。