2

エラーのある XML ドキュメントがいくつかあります。終了タグが欠落している場合があります。これが発生した場所を見つけて (手動で) 修正したいと考えています。

XOM を使用してドキュメントを解析しましたが、適切なタイミングで「終了タグがありません」と簡単に表示され、要素の名前が表示されますが、問題がファイル内のどこにあるのかがわかりません。

これを行うのに役立つ独自のパーサーを作成できますが、既に解決策があるのでしょうか? 終了タグが正しい場所に挿入されていることを確認したいので、自動整理はしたくありません。開始タグの行番号を知りたいだけです。

4

2 に答える 2

3

シンプルで、サードパーティのライブラリがなくても実行できると思います。Javaには standard class があり、終了タグの欠落を検出javax.xml.stream.XMLEventReaderするとスローします。XMLException次に、電話e.getLocation().getLineNumber()して回線番号を取得します。

少し複雑なサンプル:

    InputStream is = new FileInputStream("test.xml");
    XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    XMLEventReader eventReader = inputFactory.createXMLEventReader(is, "utf-8");
    Stack<StartElement> stack = new Stack<StartElement>();
    while (eventReader.hasNext()) {
        try {
            XMLEvent event = eventReader.nextEvent();
            if (event.isStartElement()) {
                StartElement startElement = event.asStartElement();
                System.out.println("processing element: " + startElement.getName().getLocalPart());
                stack.push(startElement);
            }
            if(event.isEndElement()){
                stack.pop();
            }
        }catch(XMLStreamException e){

            System.out.println("error in line: " +e.getLocation().getLineNumber());
            StartElement se = stack.pop();
            System.out.println("non-closed tag:" + se.getName().getLocalPart() + " " + se.getLocation().getLineNumber());

            throw e;
        }
    }
于 2012-10-26T09:18:49.680 に答える
1

XMLEventReader は、問題を解決するのに役立ちます:

次の記事を見てください。

リンク: http://tutorials.jenkov.com/java-xml/stax-xmleventreader.html

于 2012-10-26T09:37:36.993 に答える