0

次の構造のログファイルがあります。

unstructured raw text 
unstructured raw text 
..
..
..

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message>
...
...
</message> 

unstructured raw text 
..
..


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message>
...
...
</message> 

unstructured raw text 
..
..

ご覧のとおり、1 つのログ ファイル内に複数の XML ドキュメントが埋め込まれています。自分で何かを書き始める前に、ここで再利用できる一般的なユーティリティまたはライブラリがあるかどうか疑問に思っていました。Javaで必要です。

ありがとう。

4

2 に答える 2

0

Java に組み込まれている xml パーサーを使用できますが、入力として XML のみを与える必要があります。したがって、XML であるファイルの一部を文字列に読み取り、それらを文字列として解析する必要があります。文字列を XML として解析する方法がわからない場合は、こちらを参照してください: In Java, how do I parse XML as a String instead of a file?

于 2012-09-10T20:18:33.923 に答える
0

私は StAX ベースのパーサーの 1 つを好みます。Woodstoxパーサーは特にパフォーマンスが優れています。次に、別のタイプの XML パーサーを使用する必要がある場合は、イベントをパーサーからジェネレーターにシャントし、その XML を DOM ベースのパーサーや SAX ベースのパーサーなどにフィードできます (マゾヒストの場合... SAX は使用するパーサーの苦痛)。

次のような疑似コードが作成されます。

BufferedReader br = ...
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
Pattern startOfXml = Pattern.compile("<\\?xml.*\\?>");
String line;
while (null != (line = br.readLine()) {
    if (startOfXml.matcher(line).matches()) {
        XMLEventReader xr = inputFactory.createXMLEventFactory(br);
        XMLEvent event;
        while (!(event = xr.nextEvent()).isEndDocument()) {
            // do whatever you want with the event
        }
    } else {
        // do whatever you want with the plain-text
    }
}

特定のモードの一部の StAX パーサーは isEndDocument() に反対する場合があり、その場合、ドキュメントを解析するイベント レベルをカウントし、ルート レベルの終了要素に到達するとブレークアウトする必要があります。また、一部のパーサーは、ドキュメントの末尾の後に数文字をキャッシュする場合があります...最悪の場合、パーサーが最後の要素の後のテキストに気付いたときに、「不正な形式の」ドキュメントの例外をキャッチする必要があります

于 2012-09-10T20:42:32.347 に答える