0

我想在 java 中解析一个包含二进制数据的 xml 文件:这是 xml 文件的一个示例:

<?xml version="1.0" encoding="utf-8"?>
<documents>
  <document>
    <element name="docid">
      <value><![CDATA[0902307e8004c74c]]></value>
    </element>
    <element name="published">
      <value><![CDATA[2012-01-01T00:00:00]]></value>
    </element>
    <element name="documenttype">
      <value><![CDATA[Circular]]></value>
    </element>
    <element name="data">
      <value><![CDATA[%PDF-1.6
%����
1020 0 obj
<</Filter/FlateDecode/First 20/Length 270/N 3/Type/ObjStm>>stream
�o^���)|�,�Ypoef�
l���o�&gt;����u���b"Cb�|���%&��D�yD��q�q�q�q�q��%_ja�LJob��/��3"=����o���]V11}�    }a�+'6@����C�,^}�d%�۠�`s��q��5�׷^(�N��{S<S�����A��������-������f\ڌ��|U/݌�z���f�I9����g�g���s���0z'��X~
endstream
endobj
startxref
55097
%%EOF
]]></value>
    </element>
    <element name="dataname">
      <value><![CDATA[sdfsfsfsdsdfsd.pdf]]></value>
    </element>
  </document>
</documents>

通常我会这样解析这样的xml文件:

Document doc = null;
DocumentBuilder documentBuilder = null;
documentBuilderFactory = DocumentBuilderFactory.newInstance();
        try {
            documentBuilder = documentBuilderFactory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
try {

            doc = documentBuilder.parse(fastXMLFile);

        } catch (SAXException e) {
            System.out.println("SAXExept");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Test");
            return;
        }

但是由于包含二进制数据的“数据”元素,调试器告诉我:

[Fatal Error] xmlfile.xml:58:10: An invalid XML character (Unicode: 0x1a) was found in the CDATA section.
SAXExept
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x1a) was found in the CDATA section.

我现在不需要解析这个数据字段,我可以跳过它。我只想解析其余的数据。这可能吗?

4

2 回答 2

1

由于您的 XML 包含无效字符(如异常所示),因此您不能期望库成功解析它。由于您无法更改 XML 文件的创建过程,并且由于您看不到搜索引擎的代码,我相信对您来说最简单的方法是从 XML 中删除无效字符。

所以这个过程是:

1- 将 XML 的内容读入字符串

2-解析字符串并删除所有无效字符

3-将字符串写回文件中。或者如果您无法修改原始文件,请创建一个新文件

4-解析修改/新文件。

为了替换无效字符,请参阅以下链接,因为它还包括一种方法。

无效的 XML 字符:当有效的 UTF8 并不意味着有效的 XML 时

于 2012-07-31T08:48:59.710 回答
0

您的 XML 文档无效。PDF 数据应为 base64 编码或 HEX。我认为除了更改您的文档之外没有其他解决方案。

问候

于 2012-07-31T07:46:27.537 回答