草庐IT

StAXStream2SAX

全部标签

xml - 与 DOM 和 SAX 相比,XPath 是否更有效?

我需要解析一个xml字符串并找到特定文本节点的值、属性值等。我在javascript中执行此操作,并使用DOMParser类进行相同的操作。后来得知DOM占用大量内存,SAX是更好的选择。最近我发现XPath也提供了一种简单的查找节点的方法。但我不确定这3种方法中哪一种是解析XML的最有效方法。请帮助.... 最佳答案 SAX是一个自上而下的解析器,允许对XML文档进行串行访问,并且非常适合只读访问。另一方面,DOM更健壮——它将整个XML文档读入树中,当您想要更改、添加、删除该XML树中的数据时,它非常有效。当您只需要XML文档中

xml - Perl XML::SAX 部分解析

是否可以使用XML::SAX::Expat的处理程序类暂停和恢复解析??文件很大,我们正在将节点读入内存来渲染表格。我们只想一次渲染一个部分,否则我们会耗尽内存。所以我们需要停止解析文件,在程序的其他部分做一些事情,然后在下一页继续。我可以想出几种方法来实现这一点(见下文),但它们都感觉像是hack。有我可以使用的原生软件吗?可能的选择:跟踪$current_node计数器并将其传递给处理程序构造函数,每个我们解析文件的时间会在存储数据之前跳过这么多节点。与上面类似,但使用tell/seek跳过每个新调用预处理以将文件拆分为多个大小正确的文件。前两个效率低,最后一个乱。有更好的选择吗?

用于 HTML 的 PHP SAX 解析器?

我需要HTMLSAX(不是DOM!)解析器,以便PHP能够处理甚至无效的HTML代码。我需要它的原因是过滤用户输入的HTML(删除所有属性和标签允许的除外)并将HTML内容截断为指定长度。有什么想法吗? 最佳答案 SAX用于处理有效的XML并在无效标记上失败。处理无效的HTML标记需要保留比SAX解析器通常保留的更多的状态。我不知道有任何类似SAX的HTML解析器。最好的方法是先使用tidy传递HTML,然后使用XML解析器,但这可能会破坏您首先使用SAX解析器的目的。 关于用于HTML

php - XMLReader 是 SAX 解析器、DOM 解析器,还是两者都不是?

我正在测试在PHP中读取(可能很大,读取非常频繁)XML配置文件的各种方法。永远不需要写作。我有两个成功的实现,一个使用SimpleXML(我知道它是一个DOM解析器),另一个使用XMLReader。我知道DOM读取器必须读取整棵树,因此会占用更多内存。我的测试反射(reflect)了这一点。我也知道SAX解析器是一个“基于事件”的解析器,它使用较少的内存,因为它从流中读取每个节点而不检查下一个节点。XMLReader还从流中读取游标,提供有关其当前所在节点的数据。所以,听起来XMLReader(http://us2.php.net/xmlreader)显然不是DOM解析器,但我的问题

java - SAX 解析异常 : value is not a valid value for 'date'

我有一个代表XML模式的POJO对象树。这是使用以下jaxbant脚本创建的。我想根据模式验证根POJO及其子实体是否缺少属性。我的代码如下:(省略try/catchblock,灵感来自SO问题HowtovalidateagainstschemainJAXB2.0withoutmarshalling?)publicbooleanvalidateAgainstSchema(Pojopojo){JAXBContextjc;jc=JAXBContext.newInstance(Pojo.class);SchemaFactorysf=SchemaFactory.newInstance(XMLC

java - 如何在使用 sax 解析器解析 xml 文件时针对给定的 xsd 文件验证它?

我想使用SAXParser或XMLReader解析xml文件并验证该文件是否符合特定的xsd文件(newFile("example.xsd")).很简单使用Validator在额外的步骤中对xsd文件进行验证,如thisSOanswer.通过将xsd的名称指定为"http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"来在解析时进行验证,例如thisSOanswer.但是我如何根据newFile("example.xsd")在解析时进行验证? 最佳答案

java - 使用 SAX 解析具有未知数量递归的 XML 结构

我必须使用SAX解析器在JAVA中解析XML结构。问题在于该结构是递归的,递归次数未指定。这仍然不是什么大问题,问题是我无法利用XML命名空间功能,并且每个递归级别上的标记都是相同的。这是结构的一个例子。如您所见,有一个递归,最好是未定义数量的递归。现在我的问题是如何为每个递归提取所有数据并将其保存在HashMap中。例如。我可以定义一个ContentHandler对于Tags的发生并让它提取HashMap中的内容然后把它放回masterHashMap在主要内容处理程序中定义,但我不确定是否要这样做。如何在不使用命名空间的情况下提取和保存递归XML结构的内容?

java - 如何使用 SAX XML Schema Validator 的验证消息进行内部化?

我正在使用此代码针对XSD验证XML:SchemaFactoryfactory=SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");Schemaschema=factory.newSchema(xmlSchema);Validatorvalidator=schema.newValidator();Sourcesource=newStreamSource(myXmlFile);try{validator.validate(source);returnnull;}catch(SAXExceptionex){String

java - 使用 Transformer 处理空 CDATA 时出现 IndexOutOfBoundsException

我想从大型XML文件中提取特定节点。这很有效,直到出现没有任何内容的疯狂CDATA。输出:ERROR:''javax.xml.transform.TransformerException:java.lang.IndexOutOfBoundsExceptionatcom.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:732)atcom.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transf

java - 使用 SAX (Java) 解析来自单个 TCP 流的多个 XML 消息

我现在使用Java连接到一个TCP端口,一个接一个地流式传输XML文档,每个文档都用分隔。文件标签的开始。演示格式的示例:FredBloggsPeterJones我正在使用org.xml.sax.*接口(interface)。SAX解析适用于第一个文档,但在遇到第二个文档的开头时会抛出异常:Exceptioninthread"main"org.xml.sax.SAXParseException:Theprocessinginstructiontargetmatching"[xX][mM][lL]"isnotallowed.以下骨架类演示了我正在使用的设置:importorg.xml.s