xml解析将xml标记作为文本内容读取

时间:2016-06-15 01:29:13

标签: xml xml-parsing

我有这个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();

                }
            }

所以有任何方法可以阅读&lt;细胞&gt;或者&lt; / Cell&gt;在&lt;内部细胞&gt; ....&lt; / Cell&gt;作为内容而不是xml标签?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用Java XML解析器时,要求输入是格式良好的XML。这是因为内存中文档由节点和属性(以及其他一些东西)和NOT标签组成,类似于输入文本流。

文本流是称为XML文档的抽象“事物”的序列化版本。一旦将其解析为DOM,它在序列化文件中的外观细节就会消失,剩下的就是语义结构和内容。没有“标签”(开始或结束),它们是序列化的工件,而不是语义内容。

如果您需要处理其序列化版本中的子树,您可以编写一个自定义SAX(事件驱动)解析器来处理标记事件并维护序列化文本,但这将相当复杂。您也可以在序列化形式的需要点重新序列化子树。这也是“有趣的”。

如果您需要处理格式不正确的XML(即缺少结束标记或其他语法错误),则根本无法使用标准解析器。它将无法解析文档并抛出异常。

简而言之,您尝试做的事情超出了基于Java的XML解析器的范围,并且没有很好的答案不会涉及大量工作。