我有一个XML文档:
Messi
http://en.wikipedia.com/wiki/Lionel_Messi
/person
我有一个TreeMap< String,String>存储“text”和“wiki_url”元素的getTextContent()的数据.一些“实体”只有“text”元素(没有“wiki_url”)所以我需要一种方法来找出当只有文本元素作为子元素时以及何时存在“wiki_url”.我可以使用document.getElementByTag(“text”)& document.getElementByTag(“wiki_url”)但是我会失去文本和网址之间的关系.
我试图通过使用以下方法获取“entity”元素中的元素数量:
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
然而,如上所示,这将返回7(我不明白,如果你包括孙子,肯定是3或4)
然后我将使用子项的数量循环遍历它们以检查是否getNodeName().equals(“wiki_url”)并将其保存到数据(如果正确).
为什么当我只能算上3个孩子和1个孙子时,我的孩子数量为7?
解决方法:
也计入节点,类似标签之间的行尾符号也被解析为节点.如果您对具有名称的特定节点感兴趣,请添加如下所示的帮助方法,并在任何位置调用.
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时,请使用上面的辅助方法来简化主处理逻辑.
标签:java,dom,xml
来源: https://codeday.me/bug/20190629/1326650.html