我有这个 XML 文件:
<root>
<node1>
<name>A</name>
<node2>
<name>B</name>
<node3>
<name>C</name>
<number>001</number>
</node3>
</node2>
</node1>
</root>
我正在解析文件,以获取每个节点的名称,以及相应的编号(如果存在)。
我使用:
String number = eElement.getElementsByTagName("number").item(0).getTextContent();
这应该给我这样的东西:
Name | Number
A |
B |
C | 001
但是我得到:
Name | Number
A | 001
B | 001
C | 001
所以,我认为 getElementsByTagName("Number")
正在寻找一个节点的所有子节点中的数字节点。我不想要那个。有人知道解决方法吗?
我想过用XPath代替上面的方法,但我真的很想知道是否有现成的方法。谢谢
最佳答案
您可以使用 JDK/JRE 中的 javax.xml.xpath
API 来更好地控制通过 getElementsByTagName
返回的 XML。
import java.io.File;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class Demo {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File("filename.xml"));
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
Element element = (Element) xpath.evaluate("//node3/name", document, XPathConstants.NODE);
}
}
关于java - getElementsByTagName 向下搜索所有级别的 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932570/