Java上下文SAX / StAX解析

3
我想提取所有直接出现在根节点下的文本元素。我已经查看了使用DefaultHandler的Java标准SAX设施,但它似乎不具备路径感知能力。
问题是获取仅有一级的节点,而不是仅提取文本节点
是否有任何非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
@Don Roby,当然。问题已更新。 - Johan Sjöberg
2个回答

2
"SAX和StAX在本质上不具备路径感知能力,因为它们是事件驱动的。虽然可以实现一个跟踪解析层次的处理程序,但最好使用XPath。一种稍微复杂一些的策略可能是编写一个XSLT转换,仅保留你需要的元素,然后使用SAX或Stax处理结果。"

恐怕你是对的。好消息是可能有一种方法可以进行流式 XPath 评估。 - Johan Sjöberg
@Johan - 是的,那也许可行。另外,请查看我的更新,这样就不需要加载整个文档了。 - Don Roby

1

这会增加一些额外的开销,但你将得到一个强大的用于处理xml的工具。试试JAXB


谢谢,虽然我需要高效地提取XML文档中所有一级元素的List<String>,而不是将它们转换为Java对象。 - Johan Sjöberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接