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;
        }

しかし、バイナリデータを含む「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.

今ではこのデータフィールドを解析する必要はありません。スキップするだけで済みます。残りのデータを解析したいだけです。これは可能ですか?

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 に答える