Java XMLStreamException,正在检查是否缺少结束标记
Java XMLStreamException, checking for missing end tag
在给定的 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;
}
}
}
}
在main()
方法中抛出一个Exception
意味着如果你没有自己做,JVM必须捕获它,而且它很可能不知道该做什么,所以你看打印出的错误可能会中止执行。 Read about main() throwing errors here.
你只需要注释掉
行
throw e;
因为您已经处理了异常。
在给定的 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;
}
}
}
}
在main()
方法中抛出一个Exception
意味着如果你没有自己做,JVM必须捕获它,而且它很可能不知道该做什么,所以你看打印出的错误可能会中止执行。 Read about main() throwing errors here.
你只需要注释掉
行throw e;
因为您已经处理了异常。