2016-06-15 94 views
0

我有XML文件的此示例:XML解析讀取XML標籤作爲文本內容

<Cells> 

      <Cell row="1" column="1">p</Cell>  
<Cells> 

哪裏是p是單元格的內容..但有時我需要把內容的XML標籤內,我想閱讀他們作爲簡單的文字,而不是XML標籤...類似的東西:

<Cells> 
    <Cell row="1" column="1">p</Cell> 
    <Cell row="2" column="2"><Cell></Cell> 
    <Cell row="3" column="3"></Cell></Cell> 
<Cells> 

我該怎麼辦?要閱讀此XML我使用類似的東西:

doc.getDocumentElement().normalize(); 


      NodeList nList = doc.getElementsByTagName("Cell"); 

      cell = new String[nList.getLength()][4]; 

      for (int temp = 0; temp < nList.getLength(); temp++) { 

       Node nNode = nList.item(temp); 

       if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

        Element eElement = (Element) nNode; 
         cell[temp][1] = eElement.getAttribute("row"); 
         cell[temp][2] = eElement.getAttribute("column"); 
         cell[temp][3] = eElement.getTextContent(); 

       } 
      } 

因此,有什麼辦法可以閱讀<細胞>或< /細胞>一個<細胞內> .... < /電池>作爲內容和不是xml標籤?

謝謝!

+0

您可以使用'CDATA'。 –

+0

但我不能改變XML ...我覺得CDATA只適用於如果我直接在xml上寫cdata,我錯了嗎? – Joseph

+0

是的,當然,您必須使用CDATA以XML格式編寫標籤。否則,它將不會是格式良好的XML。 –

回答

1

使用Java XML解析器時,要求輸入爲格式良好的XML。這是因爲內存中的文檔由節點和屬性(以及其他一些內容)組成,而不是以類似於輸入文本流的任何方式標記。

文本流是序列化的版本的抽象「事物」,稱爲XML文檔。一旦它被解析爲一個DOM,它在序列化文件中的外觀細節就消失了,剩下的就是語義結構和內容。沒有「標籤」(開始或結束),它們是序列化的工件,而不是語義內容。

如果您需要在其序列化版本中處理一個子樹,您可以編寫一個自定義SAX(事件驅動)解析器來處理標記事件並維護序列化文本,但這相當複雜。您也可以在需要序列化的位置重新序列化子樹。這也將是「有趣的」。

如果您需要處理格式不正確的XML(即缺少結束標籤或其他語法錯誤),則根本無法使用標準解析器。它將無法解析文檔並拋出異常。

簡而言之,你所要做的事情超出了基於Java的XML解析器的範圍,並且沒有很好的解決方案,不需要大量的工作。

+0

它的確是!當我試圖保存該XML時,它顯示一條消息錯誤,指出XML格式不正確。我會嘗試再次與客戶交談,並收到更好的反饋意見,然後嘗試繼續努力!謝謝@Jim Garrison – Joseph