Java 上下文 sax / stax 解析
Posted
技术标签:
【中文标题】Java 上下文 sax / stax 解析【英文标题】:Java contextual sax / stax parsing 【发布时间】:2011-07-21 04:08:09 【问题描述】:我想将直接作为子节点出现的所有文本元素提取到根节点。我使用DefaultHandler
浏览了java 标准萨克斯风。但它似乎不是 path 感知的。
问题是获取first-level only
节点,而不是extracting only text-nodes。
是否有任何非面向 DOM 的方法来做到这一点? (注意,节点名称事先不知道)
[编辑]
示例输入
<root>
<a>text1</a>
<b>text2</b>
<c>text3</c>
<nested>
<d>not_text4</d>
...
<nested>
...
</root>
样本输出
Map<String, String> map :=
a, text1
b, text2
c, text3
目前已解决为面向 DOM 的解决方法。尽管存在为 SAX / STAX 提供 xpath 表达式子集的库。
【问题讨论】:
如果您添加一些示例输入 xml 和预期结果,我们可以更好地帮助您。 @Don Roby,当然。问题已更新 【参考方案1】:SAX 和 StAX 本质上确实不是路径感知的,因为它们是面向事件的。虽然实现跟踪解析级别的处理程序当然是可能的,但您最好使用XPath。
一种更复杂的策略可能是编写一个 XSLT 转换,它只保留您所追求的元素,然后使用 SAX 或 Stax 处理结果。
【讨论】:
恐怕你是对的。好消息是streamig xpath 可能有办法 @Johan - 是的,这可能有效。另请参阅我的更新以了解不需要加载整个文档的另一种可能性。【参考方案2】:这会有点开销,但是你会得到一个强大的工具来处理 xml。试试JAXB。
【讨论】:
谢谢,虽然我需要有效地提取 xml 文档中所有 first-level 元素的List<String>
,而不是将它们转换为 java 对象。以上是关于Java 上下文 sax / stax 解析的主要内容,如果未能解决你的问题,请参考以下文章