我有这个xml文件:
<root>
<products>
<id>1</id>
<name>newProduct</name>
</products>
<cars>
<car>
<id>qw123</id>
<color>red</color>
</car>
<car>
<id>AS6789</id>
<color>blue</color>
</car>
</cars>
</root>
我需要在列表中提取所有带有标签&#34; id&#34;的元素。它们包含在标签&#34; cars&#34;中,使用Java方法。我创建的方法是:
private static List<Node> searchNodes(Document doc, String nodeName, String tag) {
Node mainNode = doc.getElementsByTagName(tag).item(0);
List<Node> result = new ArrayList<Node>();
NodeList list = mainNode.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if (node.getNodeName().equals(nodeName)) {
result.add(node);
}
}
return result;
}
只有在&#34; id&#34;是&#34;汽车&#34;的直接孩子。因此,在这种情况下,如果&#34;标记&#34;是&#34;产品&#34;。
答案 0 :(得分:0)
实测值。我不确定它是否是最好的解决方案,但至少它起作用了:
private static List<Node> searchNodes(Document doc, String nodeName, String tag) {
Node mainNode = doc.getElementsByTagName(tag).item(0);
List<Node> result = new ArrayList<Node>();
NodeList list = mainNode.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if (node.getNodeName().equals(nodeName)) {
result.add(node);
} else {
result.addAll(getChilds(node, nodeName));
}
}
return result;
}
private static List<Node> getChilds(Node node, String nodeName) {
NodeList list = node.getChildNodes();
List<Node> result = new ArrayList<Node>();
for (int i = 0; i < list.getLength(); i++) {
if (list.item(i).getNodeName().equals(nodeName)) {
result.add(list.item(i));
}
}
return result;
}