2016-09-15 69 views
1

我想解析使用生存在網絡驅動器上的Java的XML文件...我在這裏檢查了大量的XML解析信息,但無法找到我需要的答案...問題在於,即使解析器獲取了準確的位置和文件名,getDocument()例程也會不斷返回空值。getDocument()不斷返回空值

這裏是代碼...

String ThisXMLFile = XMLFileData.getPath(); 
DOMParser myXMLParser = new DOMParser(); 
myXMLParser.parse(ThisXMLFile); 
Document doc = myXMLParser.getDocument(); 

一些注意事項:

我不得不使用的getPath()作爲的getName()函數返回不完全合格的文件名和路徑 - 在XML文件住在一個網絡目錄,該目錄映射在我的電腦上的「V」驅動

我已經導入了所有所需的類頭文件的DOM對象

上面給出的變量名稱是真實且準確的,所以如果我在變量聲明中無意中使用了保留關鍵字,那麼請提供更正。

我有幾種語言豐富的編程經驗,但這是我第一個真正的Java應用程序。

所有代碼行和上面的變量都工作,直到我到達最後一行,然後getDocument()只是將doc變量設置爲null ...這會使程序的其餘部分中斷。

+0

什麼庫你用來解析XML? –

+0

import com.sun.org.apache.xerces.internal.parsers.DOMParser; –

+0

以'com.sun.'開頭的任何類都被視爲內部實現細節,應用程序不應直接引用。相反,使用'DocumentBuilderFactory.newInstance()。newDocumentBuilder()'創建一個[DocumentBuilder](http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilder.html)實例,然後將'new File(ThisXMLFile)'傳遞給DocumentBuilder的解析方法。 – VGR

回答

0

  XMLInputFactory XMLFactory = XMLInputFactory.newInstance(); 
 
      XMLStreamReader XMLReader = XMLFactory.createXMLStreamReader(myXMLStream); 
 
      while(XMLReader.hasNext()) 
 
      { 
 
       if (XMLReader.getEventType() == XMLStreamReader.START_ELEMENT) 
 
       {   
 
        String XMLTag = XMLReader.getLocalName(); 
 
        if(XMLTag.equals("value")) 
 
        { 
 
         String idValue = XMLReader.getAttributeValue(null, "id"); 
 
         if (idValue.equals(ElementName)) 
 
         { 
 
         System.out.println(idValue); 
 
         XMLReader.nextTag(); 
 
         System.out.println(XMLReader.getElementText()); 
 
         } 
 
        } 
 
       }  
 
       XMLReader.next(); 
 
      }

所以這是我終於代碼...它的工作原理,解決了檢索特定的XML數據來回一個XML文件的問題。我首先想要使用節點列表,元素,文檔等,但這些功能從來沒有爲我工作...這一個 - 謝謝所有的答案給出,因爲他們幫助我認爲這一個通過...

0

我相信,你所呼叫的方法不對......根據你的代碼,你執行:DOMParser.parse(systemId)當你需要調用:DOMParser.parse(InputSource) ...

創建一個輸入源可以可以做到這一點:

InputSource source = new InputSource(new FileInputStream(ThisXMLFile)); 
myXMLParser.parse(source); 
Document doc = myXMLParser.getDocument(); 

注意:請記住關閉打開的FileInputStream !!!

+0

感謝這一點,我不能讓它工作,雖然,getDocument()仍然返回空... –

+0

你可以閱讀文件的內容使用FileInputStream? –

+0

是的,我可以...奇怪,雖然而不是'V:\ xmlfiledir \ xmlfile.xml'我得到'V:\\ xmlfiledir \\ xmlfile.xml' - 不知道如果雙斜線意味着任何我認爲這是完成跨平臺兼容性... –