2

我有一些带有错误的 XML 文档 - 有时缺少结束标记 - 我想找到发生这种情况的地方并修复它们(手动)。

我使用 XOM 来解析文档,它在正确的时间轻松地说“缺少结束标记”,并告诉我元素的名称,但并不能很好地引导我找到文件中的问题所在。

我可以编写自己的解析器来帮助做到这一点,但我想知道是否已经有解决方案?我不想自动整理,因为我想确保将结束标签插入正确的位置。我只想知道开始标签的行号。

4

2 回答 2

3

我认为这很简单,无需任何第三方库即可完成。Java有标准类 javax.xml.stream.XMLEventReaderXMLException当它找到丢失的结束标签时会抛出。然后调用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 回答