解析时是否可以跳过节点,这skippedEntity
与它有什么关系?
考虑以下XML:
<?xml version="1.0"?>
<nutrition>
<daily-values>
<total-fat units="g">65</total-fat>
<saturated-fat units="g">20</saturated-fat>
<cholesterol units="mg">300</cholesterol>
<sodium units="mg">2400</sodium>
<carb units="g">300</carb>
<fiber units="g">25</fiber>
<protein units="g">50</protein>
</daily-values>
</nutrition>
我想跳过“钠”元素
您可以执行以下操作:
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.XMLReader;
public class Demo {
public static void main(String[] args) throws Exception {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(new MyContentHandler(xr));
xr.parse("input.xml");
}
}
MyContentHandler
此类负责处理您的XML文档。击中要忽略的节点时,可以在IgnoringContentHandler中进行交换,这将吞噬该节点的所有事件。
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class MyContentHandler extends DefaultHandler {
private XMLReader xmlReader;
public MyContentHandler(XMLReader xmlReader) {
this.xmlReader = xmlReader;
}
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
if ("sodium".equals(qName)) {
xmlReader.setContentHandler(new IgnoringContentHandler(xmlReader,
this));
} else {
System.out.println("START " + qName);
}
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("END " + qName);
}
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch, start, length));
}
}
忽略ContentHandler
当IgnoringContentHandler完成吞咽事件后,它将控制权传递回您的主ContentHandler。
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class IgnoringContentHandler extends DefaultHandler {
private int depth = 1;
private XMLReader xmlReader;
private ContentHandler contentHandler;
public IgnoringContentHandler(XMLReader xmlReader, ContentHandler contentHandler) {
this.contentHandler = contentHandler;
this.xmlReader = xmlReader;
}
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
depth++;
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
depth--;
if(0 == depth) {
xmlReader.setContentHandler(contentHandler);
}
}
}
问题内容: 所以,我有一个像 所以,我有一个条件说如果ts =“ 2”然后做某事…现在的问题是,当它找到ts =“ 1”时,它仍然扫描标签 ,然后到达 当条件与解析中断不匹配并直接寻找下一个事务标记时,是否有办法? 问题答案: SAX解析器必须扫描所有子树(例如“ ”)以知道下一个元素的起始位置。无法解决它,这也是为什么您不能为单个XML文档并行化XML Parser的原因。 在您的情况下,我可以
我可以使用以下方法获取第一个
SAX(Simple API for XML)是一种基于事件的XML文档解析器。 与DOM解析器不同,SAX解析器不会创建解析树。 SAX是XML的流式接口,这意味着使用SAX的应用程序接收有关正在处理的XML文档的事件通知元素和属性,从文档顶部开始按顺序排列,然后关闭ROOT元素。 从上到下读取XML文档,识别构成格式良好的XML文档的标记。 令牌的处理顺序与它们在文档中出现的顺序相同。 向应用
SAX(Simple API for XML)是一个基于事件的xml文档解析器。 与DOM解析器不同,SAX解析器不会创建解析树。 SAX是XML的流式接口,这意味着使用SAX的应用程序接收有关正在处理的XML文档的事件通知 - 元素和属性,从文档顶部开始按顺序排列,并以关闭为止ROOT元素。 从上到下读取XML文档,识别构成格式良好的XML文档的标记。 令牌的处理顺序与文档中出现的顺序相同。 报
部门:AILab - 机器人 - 后台开发 投递:官网 一面 23.5.10 问项目 介绍(务必练习出有引导有重点的介绍!) 难点 token怎么实现 计网 TCP和UDP的区别 为什么三次握手 WebSockt http1.0 / 1.1 / 2 / 3 MySQL 有哪些引擎 InnoDB和MyISAM的区别 区别 隔离级别 最左前缀原则 操作系统 分段和分页的区别 进程通信 C++ 友元fr
问题内容: 我正在尝试读取一个大型XML文档,我想以分块的方式进行,而不是将整个文件读入内存的方式。我知道我可以使用它来执行此操作,但我想知道是否有人将SAX用于.NET?我知道Java开发人员对此很满意,我想知道是否值得尝试一下,如果可以的话使用它有什么好处。我正在寻找细节。 问题答案: 如果您在谈论.NET的SAX,则该项目似乎没有得到维护。最新版本是2年前。也许他们在上一个版本中做到了完美,