我想在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�>����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;
}
但是由于包含二进制数据的“data”元素,调试器告诉我:
[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.
我现在不需要解析这个数据字段,我可以跳过它。我只是想解析其余的数据。这可能吗?
答案 0 :(得分:1)
由于您的XML包含无效字符(如异常所示),因此您不能指望库成功解析它。由于您无法更改XML文件创建过程,并且由于您无法看到搜索引擎的代码,因此我认为最简单的方法是从XML中删除无效字符。
所以过程将是:
1-将XML的内容读入字符串
解析String并删除所有无效的Charachters
3-将String写回文件。如果无法修改原始文件,请创建新文件
解析修改后的/新文件。
要替换无效字符,请参阅以下链接,因为它还包含一种方法。
Invalid XML Characters: when valid UTF8 does not mean valid XML
答案 1 :(得分:0)
您的XML文档无效。 PDF数据应为base64编码或HEX。 除了更改文档外,我认为没有解决方案。
此致