gpt4 book ai didi

Java org.w3c.dom - 递归查找并返回 NodeList 中的属性值

转载 作者:行者123 更新时间:2023-12-01 21:49:22 24 4
gpt4 key购买 nike

我当前正在解析来自 Web 服务的 XML 响应。它返回有限数量的 <result>元素。我目前正在迭代 NodeList的结果。

当我迭代这个过程时,有时我需要找到每个 <result> 中存在的属性的值。元素。在这种情况下,我想调用一个遍历所有子节点(可能还有子节点的子节点等)并返回属性值的方法。

我尝试递归地执行此操作:

private String findAttrInChildren(Element element, String tag) {
if (!element.getAttribute(tag).isEmpty()) {
return element.getAttribute(tag);
}

NodeList children = element.getChildNodes();
for (int i = 0, len = children.getLength(); i < len; i++) {
if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) children.item(i);
return findAttrInChildren(childElement, tag);
}
}

// We didn't find it, return null
return null;
}

不幸的是,这不起作用。递归是这里最好的方法吗?我认为我想在最后返回一个值这一事实让我在某个地方陷入困境,而不是实现 void递归方法。

最佳答案

你太早离开递归了。鉴于

if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) children.item(i);
return findAttrInChildren(childElement, tag);
}

这将在第一个子元素处结束递归搜索 - 无论子元素或其后代之一是否具有该属性。

因此测试返回的属性是否不为空:

if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) children.item(i);
String attr = findAttrInChildren(childElement, tag);
if (attr != null)
return attr;
}

关于Java org.w3c.dom - 递归查找并返回 NodeList 中的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com