1

私は問題があります。XML を返すリンクを呼び出しています。この xml を解析する必要がありますが、xml が適切にフォーマットされていません。xml を以下に示します。

<string>
    <?xml version="1.0" encoding="utf-16" ?>
    <tag1>TAG1</tag1>
    <tag2>TAG2</tag2>
    <tag3>TAG3</tag3>
    <tag4>TAG4</tag4>
</string> 


このエラーのあるxmlを何らかの方法で解析する以外に選択肢はありません。
InputStream を取得しています。この InputStream はオンザフライで変更できますか?

上記の問題に対する解決策をいただければ幸いです。

4

3 に答える 3

0

ある言語でテキストを解析する必要がある場合、最初のステップは、解析する言語を定義することです。これまでのところ、その言語のテキストの例を1つだけ示しています。他にどのような「誤ったXML」を解析したいかを知る方法はありません。たとえば、解析したい場合などです。

<?xlm vresion="1,0 decoding="utf-9">a<b>c

多分?

プログラムで受け入れたい言語を定義したら、その言語のパーサーの作成を開始できます。言語がXMLにかなり近い場合は、パーサーがテキストをXMLに変換してから、XMLを解析するのが妥当な戦略である可能性があります。

言語とXMLの唯一の違いが、XML宣言をどこにでも表示できるようにすることであり、任意のコメントやCDATAセクションのコンテンツを保持するなどの「エッジケース」にあまり関心がない場合は、合理的です。戦略は、のすべての出現箇所をで置き換えるファイルを前処理すること<?xmlです<?xxml

于 2012-06-04T17:04:07.867 に答える
0

ご存じのように、Java ストリーム フレームワークはラッパー (デコレータ) パターンを使用します。ストリームは、他のストリームをラップして、特定の機能を追加できます。あなたもこのパターンに従うことができます。をご覧くださいBufferedInputStream。同様のものを実装でき、おそらく継承することさえできますBufferedInputStream。ストリームは<?xml version="1.0" encoding="utf-16" ?>、" " 内の無効な場所にあるパターンを削除しますXML。したがって、生成されたストリームは、通常の XML パーサーで解析できる正しい XML になります。

于 2012-06-04T08:06:35.417 に答える
0

解析前に受け取ったら、次xmlで始まる行を探します。

<?xml ...

そして、この行を削除します。
この時点で、通常のxmlパーサーを新しい .xml で使用できますxml

パーサーに入力する前にファイルから不要な行を削除するために、必要に応じていくつかの助けを借りてJavaでapacheIOUtilsライブラリを使用できます。String#replaceAllregexxml

于 2012-06-04T08:28:15.430 に答える