私が作業しているXMLファイルは作成されていないため無効です。未加工のXMLを事前処理します(Java)
- 複数のXML宣言(エラーメッセージ:これは、以下の問題提示する。処理命令目標マッチング "[XX] [mm]の[LLが" 許可されていないをルート要素の
不在を(エラーメッセージ:文書の終わりに追加コンテンツ)
ファイルは複数のレコードを含み、これは、2つのレコードを抜粋である:
<?xml version="1.0" encoding="utf-8"?> <ElementAa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="some-namespace"> <ElementBa attributeB1="11111" attributeB2="someDate"> <ElementCa attributeC1="someString" attributeC2="someOtherDate"> <ElementDa attributeD1="12345" /> </ElementCa> <ElementEa attributeE1="ABCD" /> </ElementBa> </ElementAa> <?xml version="1.0" encoding="utf-8"?> <ElementAb xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="some-namespace"> <ElementBb attributeB1="22222" attributeB2="AgainDate"> <ElementCb attributeC1="anotherString" attributeC2="yetAnotherDate"> <ElementDb attributeD1="67891" /> </ElementCb> <ElementEb attributeE1="EFGHI" /> </ElementBb> </ElementAb>
、上記文書は(私が間違っているなら、私を修正してください)このになってする必要があります。
<?xml version="1.0" encoding="utf-8"?>
<ElementAa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="some-namespace">
<ElementBa attributeB1="11111" attributeB2="someDate">
<ElementCa attributeC1="someString" attributeC2="someOtherDate">
<ElementDa attributeD1="12345"/>
</ElementCa>
<ElementEa attributeE1="ABCD"/>
</ElementBa>
<ElementBb attributeB1="22222" attributeB2="AgainDate">
<ElementCb attributeC1="anotherString" attributeC2="yetAnotherDate">
<ElementDb attributeD1="67891"/>
</ElementCb>
<ElementEb attributeE1="EFGHI"/>
</ElementBb>
</ElementAa>
私はそれを認識していますが、データが高品質でなければならないすべての可能な世界の中で最高のものですが、残念ながら私は貧弱なデータセットに対処しなければならず、整形式で有効なXMLを達成するための良いアプローチを見つけようとしています。現時点では、すべてのXML宣言(正規表現にはPattern/Matcherを使用)を削除し、ファイルの先頭に必要なものだけを挿入するユーティリティメソッドを2つ作成しました。のみ保持する<ElementAa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="some-namespace">
私はこのアプローチが特に理想的ではないと思うし、大きなファイルを扱うときには非常に問題になると思います。どんな勧告、示唆、潜在的なアプローチも大いに評価されるだろう!私は実際に説明されたシナリオの良いアプローチを探しています。
は、どうもありがとうございますI.
EDIT 1:述べたように 、XMLコンテンツは、.txtファイルと私が使用共通BufferedReaderのを読んで書いた2つのユーティリティメソッド内にありますその内容。私はすべての "データクリーニング"を行う前に.xml拡張子のファイル名を変更する(私はそれを行う別のユーティリティを持っている)とJaxBパーサーにフィードします。
EDIT 2:残念ながら、私はFTPから直接ファイルを読み込むため、XML生成を制御できません。私が抜粋を提供した結果のXMLに複数のXMLをどのように連結するかを制御するのは良いことですが、不可能です。
推奨:ファイルを作成したコードを変更して、有効なXMLファイルを作成してください。または、複数のXMLファイルを1つに連結しないように変更しますが、ファイルシステム上の個別のファイルとして、またはzipファイル内の個別のエントリとして、別々にしておきます。 2番目のオプションは、ファイルをまとめて保存したり、ダウンロードしたりする場合に特に適しています。 – Andreas
@アンドレアス、私はそれをすることはできません、私は恐れています。 「XML」ファイル(縦型のカンマは整形式ではないために生成されているため)がどのように生成されるかについて私はコントロールできません。私はそれがむしろ迷惑であることを知っていますが、私はあなたが正しく悪いデータと呼ぶものを迂回する可能性のある手段を模索しています。 – paranza
次に、それらを連結解除することをお勧めします。 '<?xml' XML宣言をスキャンし、その直前で分割し、各部分を別々に解析します。 – Andreas