- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我试图通过简单地实现 org.xml.sax.ContentHandler
来解析我在 SAX 中的第一个 XML 文档,但我不知道我是否理解流程。对于给定的 XML 文档:
<?xml version="1.0"?>
<list>
<item>
<name>One</name>
<description>The number 1, expressed in letters.
</item>
<item>
<name>Two</name>
<description>The number 2, expressed in letters.
</item>
</list>
解析器中事件的预期顺序是什么?我的假设是否正确:
startDocument()
startElement() -> "list"
startElement() -> "item"
startElement() -> "name"
characters() (>=1 times) -> "One"
endElement() -> "name"
startElement() -> "description"
characters() (>=1 times) -> "The number 1, expressed in letters."
endElement() -> "description"
endElement() -> "item"
startElement() -> "item"
startElement() -> "name"
characters() (>=1 times) -> "Two"
endElement() -> "name"
startElement() -> "description"
characters() (>=1 times) -> "The number 2, expressed in letters."
endElement() -> "description"
endElement() -> "item"
endElement() -> "list"
endDocument()
这就是它的要点吗?
此外,最简单的解析方法是什么?目前,在每次调用 startElement
时,我都会将当前元素的名称保存为私有(private)变量,以便在 characters
调用中解析数据时使用。有没有更简单/更好的方法?
最佳答案
是的,您已经掌握了要点。
SAX 是一个非常低级的接口(interface),所以不要期望它很容易。在大多数 SAX 应用程序中,您可能希望维护一个堆栈,其中 startElement 将元素名称压入堆栈,endElement 将其弹出。如果您不处理混合内容,那么 characters() 可能应该附加到与堆栈顶部的元素关联的 StringBuffer,并且您应该在 endElement 事件发生时处理 StringBuffer 中的字符内容。这是因为字符内容可以按照解析器所需的任何方式拆分为对 characters() 的多个调用。
关于java - SAX 究竟是如何解析文档的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6687300/
Feel free to skip straight to TL/DR if you're not interested in details of the question 简短的序言: 我最近决定
我一直在阅读 A Tour of Go学习Go-Lang到目前为止一切顺利。 我目前在 Struct Fields类(class),这是右侧的示例代码: package main import "fm
Last time I got confused顺便说一下PowerShell急切地展开集合,基思总结了它的启发式如下: Putting the results (an array) within a
我是一名优秀的程序员,十分优秀!