2016-06-15 95 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