【问题标题】:Java XMLStreamException, checking for missing end tagJava XMLStreamException,检查是否缺少结束标记
【发布时间】:2015-07-27 07:52:27
【问题描述】:

在给定的 XML 文件中,我需要检查每个起始标记是否有结束标记

如果没有找到结束标签,我想给出一个带有行号和标签名称的错误消息

我设法这样做了,但控制台中仍然显示异常.. 我怎样才能只显示错误消息?

缺少员工结束标记的示例 xml 文件:

<company>
<staff>
        <name>john</name>
        <area>area1</area>
        <city>city1</city>
        <initials>js</initials>

</company>

代码:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Stack;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;



public class trial {

public static void main(String[] args) throws FileNotFoundException, XMLStreamException {

    InputStream is = new FileInputStream("C:/Users/IBM_ADMIN/Desktop/comparison.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;
        }
    }


}



}

【问题讨论】:

  • 你可以返回你在控制台打印的字符串。您可以将您的逻辑放在一个方法中并返回字符串而不是执行throw e;
  • 自从你 throw e;,在你的 main() 中,异常未被捕获,因此被打印出来。

标签: java xml tags


【解决方案1】:

main() 方法中抛出Exception 意味着如果你自己没有这样做,JVM 必须捕获它,而且它很可能不知道该怎么做,所以你会看到打印的错误并可能执行中止。 Read about main() throwing errors here.

你需要的只是简单地注释掉这一行

throw e;

因为您已经处理了异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多