2

Digester を使用して xml ファイルを解析していますが、次のエラーが発生します。

May 3, 2011 6:41:25 PM org.apache.commons.digester.Digester fatalError
SEVERE: Parse Fatal Error at line 2336608 column 3: The element type "user" must be terminated by the matching end-tag "</user>".
org.xml.sax.SAXParseException: The element type "user" must be terminated by the matching end-tag "</user>".

ただし、2336608 はテキスト ファイルの最後の行です。タグを開いていると思いますが、決して閉じません。大きなテキストファイルでそれを見つけて修正する方法を知っていますか?

ありがとう

4

4 に答える 4

2

行の各ファイルをスキャンし、開いているタグが見つかるたびに<user>カウンターをインクリメントして出力する別のスクリプトを作成します

line number 1234 <user> opened (1 open total)

終了タグが見つかるたびに</user>、カウンターの出力を減らします

line number 4546 </user> closed (0 open total)

終了タグよりも開始タグが 1 つ多いため、このスクリプトの最終出力は、1 つのタグが開いたままになっていることを示します。ただし、XML モデルでタグのネストが許可されていない<user>と仮定すると、問題のある宣言は の出力が表示される場所にあると想定できますline number ... <user> opened (2 open total)

于 2011-05-03T17:00:06.603 に答える
1

を使用しtidy -xml -e <your-xml-file>ます。 http://tidy.sourceforge.net/

Tidy は HTML を検証するための優れた小さなツールであり、XML モード (-xml上記) では XML も検証します。

解析エラーの行番号と列番号を出力します。

主要なパッケージ マネージャー (apt、port など) のほとんどには、ビルド済みのパッケージがあります。

于 2011-05-03T17:33:57.767 に答える
1

$ grep -Hin "</\?user>" Text.xmlまたは のいずれかですべての行を出力します。それらがネストされていない場合は、その出力ファンを調べて、欠落している終了タグを見つけることができるはずです (直後に続く . スクリプトは同じことを行います:

https://gist.github.com/953837

これは、開始タグと終了タグが異なる行にあることを前提としています。

于 2011-05-05T12:23:28.233 に答える
0

xml エラーを検出するためにスクリプトを作成する必要はないと思います。たとえば、 http://www.w3schools.com/xml/xml_validator.aspの w3 xml バリデーターを使用できます。

そこに 15 mb の xml を貼り付けたところ、非常に簡単に修正できました。どこかにアップロードできる場合は、xml を URL として入力することもできます。Java は問題ないように見える場所でエラーを報告しましたが、このツールは実際のエラーをローカライズし、それを修正した後、Java はエラーを発生させなくなりました。

xml エラーにはさまざまな種類があり、すべてがネストされた構造に関連しているわけではないため、よく知られているツールを使用することをお勧めします。たとえば、私のエラーは引数エラー (" がありませんでした) でしたが、Java はネストの問題を検出しました。

于 2011-11-01T10:43:01.647 に答える