我有以下XML结构
<urlset><!-- lib.meine_sitemap [begin] -->
<menu level="1">
<title>Products</title>
<url>index.php?id=395</url>
<menu level="2">
<title>Title</title>
<url>index.php?id=426</url>
<menu level="3">
<title>Title</title>
<url>index.php?id=437</url>
<cat>41</cat>
<cat>42</cat>
</menu>
<menu level="3">
<title>Title</title>
<url>index.php?id=436</url>
<cat>80</cat>
</menu>
</menu>
</menu>
(...)
</urlset>
现在我想获得“菜单级别1”的所有子节点。在列表视图中显示标题。当我使用时:
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(response));
Document doc = dBuilder.parse(is);
NodeList nodes = doc.getElementsByTagName("menu");
我获得所有元素而不仅仅是菜单级别1的子节点。
当我使用时
NodeList nodes = doc.getChildElements();
这似乎有效,但后来我再也不能这样做了:
nodes.item(0).getChildElements();
我怎样才能实现我只获得节点的子菜单?
谢谢!
答案 0 :(得分:0)
所以最后我得到了一个解决方案。诀窍是使用node.getNextSibling()
以下代码获取所有menu
标记,然后阅读它们的title
标记并将其添加到Arraylist。
private void diveDeep(int index)
{
currentNode = (Node)currentNodes.get(index);
currentNodes = new ArrayList<Node>();
valueList = new ArrayList<String>();
Node childNode = currentNode.getFirstChild();
while(childNode.getNextSibling() != null)
{
childNode = childNode.getNextSibling();
if(childNode.getNodeName().equals("menu"))
{
currentNodes.add(childNode);
NodeList nodes = childNode.getChildNodes();
for(int i = 0; i < nodes.getLength(); i++)
{
if(nodes.item(i).getNodeName().equals("title"))
{
valueList.add(nodes.item(i).getTextContent());
}
}
}
}
}