我正在尝试用 Java 解析 XML 文件,它工作得很好,但我真的不明白为什么。我有以下代码(我只是剪掉了重要的东西):
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File(fileName));
NodeList nodeList = document.getDocumentElement().getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++)
{
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element elem = (Element) node;
// Get the value of all sub-elements.
String original = elem.getElementsByTagName("Original")
.item(0).getChildNodes().item(0).getNodeValue();
String translation = elem.getElementsByTagName("Translation").item(0)
.getChildNodes().item(0).getNodeValue();
Integer score = Integer.parseInt(elem.getElementsByTagName("Score")
.item(0).getChildNodes().item(0).getNodeValue());
}
我的 XML 很简单:
<?xml version="1.0" encoding="UTF-8"?>
<Dictionary>
<Word>
<Original>die Unterwäsche</Original >
<Translation>Bielizna</Translation>
<Score>-4</Score>
</Word>
<Word>
<Original>die Müche</Original>
<Translation>Fatyga, trud</Translation>
<Score>0</Score>
</Word>
<Word>
<Original>wetten</Original>
<Translation>założyć się</Translation>
<Score>-6</Score>
</Word>
<Word>
<Original>umsonst</Original>
<Translation>Bez powodu</Translation>
<Score>0</Score>
</Word>
</Dictionary>
大问题是:为什么在调用 nodeList.getLength() 时我有 9 个节点?我打印了它们,其中 4 个是元素(看起来不错),另外 5 个是文本节点,但我并没有真正理解它们是什么。为什么 Node 被投在 Element 上?
第二件事是这部分:
elem.getElementsByTagName("Score")
.item(0).getChildNodes().item(0).getNodeValue());
我在找到的节点上调用 item(0),但实际上它又是什么?
我非常感谢您的帮助,我是初学者,现在我正在努力解决一段时间。发布分步指南 列出的部分 XML 对我来说意味着一个世界。