2016-01-29 27 views
0

我試圖解析一個XML文檔,出於某種原因,我無法從任何東西獲取任何子節點。我已經厭倦我所知道的一切。我最初嘗試使用Dom4J,但在命名空間方面遇到很大困難。現在我試圖使用標準的DOM解析器。Java Dom解析器不會返回子節點

我已閱讀了oracle教程以及其他人,但沒有看到爲什麼我最基本的功能失敗的建議。

我會分享我的代碼開始:

package testingtemp; 

import org.w3c.dom.*; 
import javax.xml.parsers.*; 
import java.io.*; 

public class DomParser { 

    public static void main(String args[]){ 

     try{ 

      File inputFile = new File("C:\\Users\\jhamric\\Desktop\\Camt54.xml"); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(inputFile); 
      doc.getDocumentElement().normalize(); 
      System.out.println("Root Element: "+doc.getDocumentElement().getChildNodes()); 

     }catch (Exception e){ 
      e.printStackTrace(); 
     } 

    } 

} 

所以乾脆我想要做的是還給孩子節點爲根(這是「文件」)。有一個子節點應該被退回。

<?xml version="1.0"?> 

-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"> 


    -<BkToCstmrDbtCdtNtfctn> 


     +<GrpHdr> 


     -<Ntfctn> 

        <Id>161RD2521JI00XSZ</Id> 

        <CreDtTm>2016-01-27T13:25:21</CreDtTm> 

這是我的XML的只是一小部分,但你可以清楚地看到thatBkToCstmrDbtCdtNtfctn應返回作爲打印屏幕的子節點。相反,我的控制檯輸出看起來是這樣的:

Root Element: [Document: null] 

它報告回到正確的根元素,但隨後告訴我,有沒有子節點。是什麼賦予了?任何幫助將不勝感激!

回答

3

您正在看到的輸出是[Document: null]。這實際上並沒有提供任何有意義的信息。

使用

NodeList nl = doc.getDocumentElement().getChildNodes(); 
System.out.println(nl.getLength()); 
if (nl.getLength() > 0) 
    System.out.println(nl.item(0).getNodeName()); 

來驗證你的元素是存在的。

+0

完美的工作。所以它按照我的意願返回了正確的節點。現在,如果我想進入該節點,你會介意解釋嗎?假設該節點被稱爲「BkToCstmrDbtCdtNtfctn」。 – jesric1029

+1

@ jesric1029只是使用節點或元素的界面來導航文檔和訪問屬性。不幸的是DOM是一個過於複雜和不直觀的API ,,, – wero

+0

謝謝。我相信我想要的是在具有屬性的節點上使用的「getTextContent」名稱。這樣做的目標是將XML文件解析爲表格。通過能夠將具有屬性的每個節點解析爲單個列表,我想我可以保存到表格中。 – jesric1029