实体" uuml"被引用但未声明 - XMLStreamException

时间:2015-07-22 09:54:27

标签: java xml excel xml-parsing stax

尝试从 SpreadsheetML 2003 (基本上是XML)生成 XLSX 文件。 CLOB使用数据库中的CLOB包含SpreadsheetML 2003(XML)。我试图通过 STAX 解析器解析xml,并使用 POI API 将其写入XLSX文件。但是在stax中进行处理时它会抛出异常。

注意:使用XML编码 UTF-8 格式。

例外:

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,16706]
Message: The entity "uuml" was referenced, but not declared.
        at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:588)
        at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getElementText(XMLStreamReaderImpl.java:845)
        at com.db.smis.planus.servlet.ServletApp.doProcess(ServletApp.java:224)

示例XML:



  <?xml version="1.0"? encoding="UTF-8">
       <?mso-application progid="Excel.Sheet"?>
       <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
         xmlns:o="urn:schemas-microsoft-com:office:office"
         xmlns:x="urn:schemas-microsoft-com:office:excel"
         xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
         xmlns:html="http://www.w3.org/TR/REC-html40">
        <Row>
          <Cell ss:StyleID="s29"><Data ss:Type="Number">7662</Data></Cell>
          <Cell ss:StyleID="s73"><Data ss:Type="String">C. &amp; A. AAAAA &amp; CO. KG</Data></Cell>
    </Row>
    <Row>
        <Cell ss:StyleID="s29"><Data ss:Type="Number">7662</Data></Cell>
        <Cell ss:StyleID="s28"><Data ss:Type="String">M&uuml;nchen,K&ouml;ln</Data></Cell>
    </Row>
    <Row>
        <Cell ss:StyleID="s29"><Data ss:Type="Number">7662</Data></Cell>
        <Cell ss:StyleID="s28"><Data ss:Type="String">D&uuml;sseldorf</Data></Cell>
    </Row>
    </Workbook>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您需要声明&uuml;个权利,或者用十六进制或十进制等值替换它们,在这种情况下我猜ü

<!DOCTYPE definition [
    <!ENTITY uuml "&#220;">
]>

更新
如果您有更多特殊字符,请使用我们的Apache commons lang的朋友StringEscapeUtils.unescapeXML

Full example here