有没有办法使用 sax 解析器获取 xml 文件中的第一个标记并确保它具有相应的结束标记?
问问题
1821 次
4 回答
1
这听起来更像是您想使用 DOM 解析。
如果您使用 sax 解析,您实际上是在说您不想一次处理(加载到内存中)整个文档。如果您搜索第一个标签 end(根标签),您将一次扫描整个文档,并失去 SAX 的优势。
当您加载文档并且它的格式不正确时,DOM 解析也会抛出。因此无需手动检查根标签是否关闭。
于 2012-07-24T15:14:37.867 回答
1
只需处理 endDocument,如果调用它,那么它的格式是正确的。
于 2012-07-24T15:10:41.813 回答
1
您可以处理startElement()
,endElement()
和endDocument()
,或者只处理endDocument()
. endDocument()
如果文档格式不正确,应该抛出异常。但是,为了学习,我将展示一些示例:
public class MyParser extends DefaultHandler {
private String firstElement;
private String lastElement;
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
if(firstElement == null) {
firstElement = name;
}
}
public void endElement(String uri, String localName, String name) throws SAXException {
lastElement = name;
}
public void endDocument() {
if(lastElement.equals(firstElement)) {
// Well formed input
}
}
}
您还可以确保所有元素都使用堆栈关闭:
public class MyParser extends DefaultHandler {
Stack<String> stk;
//...
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
stk.push(name);
}
public void endElement(String uri, String localName, String name) throws SAXException {
if(stk.pop().equals(name)) {
// Input is well formed for each tag
}
else {
// Not well-formed
}
}
}
于 2012-07-24T15:11:40.803 回答
0
如果任何标签未打开或关闭,SAX 解析器实际上会引发异常,因此不需要对其进行处理....因此,如果 XML 文件错误/损坏,SAX 解析器将抛出异常
于 2012-07-24T15:33:04.403 回答