【问题标题】:Handling XML file in Java, nodes confusion在 Java 中处理 XML 文件,节点混乱
【发布时间】:2015-07-21 07:31:14
【问题描述】:

我正在尝试用 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 内容对我来说意味着一个世界。

【问题讨论】:

  • 什么是builder,什么是document
  • 我添加了相关的行,对不起。

标签: java xml dom nodes child-nodes


【解决方案1】:

为什么调用 nodeList.getLength() 时我有 9 个节点?

这9个节点是:

1 of
4 of

之间的一切

另外 5 个是文本节点,但我不明白它们是什么

<?xml version="1.0" encoding="UTF-8"?>
<Dictionary>                         <-- null text
    <Word>                           <-- null text
        <Original>...
        <Translation>...
        <Score>...
    </Word>
    <Word>                           <-- null text
        <Original>...
        <Translation>...
        <Score>...
    </Word>
    <Word>                           <-- null text
        <Original>...
        <Translation>...
        <Score>...
    </Word>
    <Word>                           <-- null text
        <Original>...
        <Translation>...
        <Score>...
    </Word>
</Dictionary>

为什么 Node 会被投射到 Element 上?

要回答最后一部分,我建议您参考另一篇帖子:What's the difference between an element and a node in XML?

【讨论】:

  • 谢谢@ThisClark,现在很清楚了,我注意到还有一件事,我可以使用:(elem.getElementsByTagName("Score") .item(0).getChildNodes().item(0).getNodeValue());) 而不是:(elem.getElementsByTagName("Score") .item(0).getTextContent());) 它可以工作。还好吗?
  • 如果它满足您的需求,那绝对没问题。如果您正在寻找使用 XML 的更好方法,则必须阅读有关该主题的更多信息并练习不同的方法,直到您感觉更舒服为止。查看 SAX 和 StAX 中的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多