簡體   English   中英

無法獲取 Xml 節點的第一個子節點

[英]Cannot get first child of Xml Node

我的問題是使用getFirstChild()獲取XML節點的第一個子節點。 我的xml很基礎,如下:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <network name="beep">
    <layers number="3">
        <layer index="0" lenght="3">
         ...
        </layer>
        <layer index="1" lenght="3">
         ...           
        </layer>
         ....
    </layers>
    </network>  

Java代碼

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.StringReader;
import org.xml.sax.InputSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

try {
DocumentBuilderFactory DBF = DocumentBuilderFactory.newInstance();
DocumentBuilder DB = DBF.newDocumentBuilder();
Document doc = DB.parse(new InputSource( new StringReader(Xml)));
doc.getDocumentElement().normalize();
Element root = doc.getDocumentElement();
NodeList Nodes =root.getElementsByTagName("network");
Node Layers = Nodes.item(0).getFirstChild();

}
catch (Exception ex)
{

}

如您所見,有一個元素是“網絡”的子元素,它是“層”。 我可以成功訪問網絡,獲取節點列表,這基本上是一個節點,但是一旦我嘗試獲取第一個(也是唯一一個)節點的第一個子節點:

Node Layers = Nodes.item(0).getFirstChild();

我得到一個例外,更有趣的是,例外是null

問題出在哪里?

Please try below code(both Files):

       1) XML File:
        _________

        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <network name="beep">
          <layers number="3">
            <layer index="0" lenght="3">Hare</layer>
            <layer index="1" lenght="3">Rama</layer>
            <layer index="0" lenght="3">Hare</layer>
            <layer index="1" lenght="3">Krishna</layer>
          </layers>
        </network>
    **************************************************************
  2) Java File:
    __________

    import java.io.InputStream;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;

    public class XMLDemo {

        public static void main(String...lsdfs) {
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            try {
              InputStream inputStream = XMLDemo.class.getClassLoader().getResourceAsStream("dataFilePackage/XmlData.xml");
              DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
              Document document = documentBuilder.parse(inputStream);
              NodeList nodeList = document.getElementsByTagName("network");
              System.out.println(nodeList.item(0).getTextContent());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
          }
    }

我將您的 xml 修改為:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<network name="beep">
  <layers number="3">
    <layer index="0" lenght="3">Vishwa</layer>
    <layer index="1" lenght="3">Ratna</layer>
  </layers>
</network>

Java代碼:

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Main {

  public static void main(String[] args) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    try {
      DocumentBuilder builder = factory.newDocumentBuilder();

      InputStream inputStream = Main.class
          .getClassLoader().getResourceAsStream("resources/nodes.xml");
      Document doc = builder.parse(inputStream);
      NodeList nodes = doc.getElementsByTagName("network");
      System.out.println(nodes.item(0).getTextContent());

    } catch (FileNotFoundException | ParserConfigurationException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

輸出/輸出

Vishwa

Ratna

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM