【问题标题】:StAX well-formedness check of XMLXML 的 StAX 格式良好检查
【发布时间】:2016-11-10 09:25:11
【问题描述】:

我正在检查 XML 文档的格式是否正确(仅检查语法)。我没有针对任何架构进行验证。 我需要使用 StAX 来做到这一点:

我知道我必须解析文件,但是如何实现检查?

XMLInputFactory factory = XMLInputFactory.newInstance(); 
File f = new File(uploadfileName);
FileInputStream inputStream = new FileInputStream(f); 
//Instantiate a reader parsing:
XMLStreamReader reader=factory.createXMLStreamReader(inputStream);

        while(reader.hasNext()){
            //check to be implemented??
            reader.next();
        }

【问题讨论】:

  • 你已经完成了。通过读取所有事件,XML 已被完整处理,因此您知道没有 XML 语法错误。如果有,就会抛出异常。 --- 仅供参考:当我说完成时,我的意思是当您关闭 inputStream 时您将完成,最好使用 try-with-resources。
  • 所以如果我想显式添加我自己的错误信息,我应该使用 try-catch 块吗?
  • 如果在处理之前必须确保 XML 的格式正确,请在开头添加一个空传递...

标签: java xml xml-parsing stax well-formed


【解决方案1】:

作为@Andreas commented,格式良好将通过在使用所有解析事件的过程中没有抛出任何异常来表示。

具体来说,XMLStreamReader.next() 将针对正在解析的 XML 中遇到的任何格式正确的错误抛出一个 XMLStreamException。如果解析进行到XMLStreamReader.hasNext() 返回false 并终止while 循环而没有触发任何XMLStreamExceptions,则可以确定XML 格式正确。

【讨论】: