1

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 にキャストされるのはなぜですか?

2番目はこの部分です:

elem.getElementsByTagName("Score")
         .item(0).getChildNodes().item(0).getNodeValue());

見つかったノードで item(0) を呼び出していますが、実際には何ですか?

私は非常に初心者で、しばらく苦労しています。リストされた XML の一部を含むステップバイステップのガイドを投稿することは、私にとって世界を意味します。

4

1 に答える 1

1

nodeList.getLength() を呼び出すときに 9 つのノードがあるのはなぜですか?

9 つのノードは次のとおりです。

<Document> の 1
つ <Word> の 4 つ <Word>
の間のすべての 4 つ

他の 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 にキャストされるのはなぜですか?

この最後の部分に答えるために、別の投稿を参照してください: XML の要素とノードの違いは何ですか?

于 2015-05-11T19:50:49.403 に答える