如何在 Java 中进行类型安全的 Xpath 查询?
我目前正在使用 JDOM 进行一些简单的 XML 解析,似乎没有什么是类型安全的 - 我在使用内置 Java DOM 解析器时遇到了类似的问题,只是需要处理更多的 API。
例如,XPath.selectNodes
将一个 Object
作为其参数并返回一个原始列表,这感觉有点 Java 1.1
Java 是否有通用化的 XML 和 XPath 库,或者是否有某种原因导致无法以类型安全的方式执行 XPath 查询?
I'm currently using JDOM for doing some simple XML parsing, and it seems like nothing's type safe - I had a similar issue with using the built-in Java DOM parser, just with lots more API to wade through.
For example, XPath.selectNodes
takes an Object
as its argument and returns a raw list, which just feels a little Java 1.1
Are there generic-ized XML and XPath libraries for Java, or is there some reason why it's just not possible to do XPath queries in a type-safe way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您熟悉 HTML 上的 CSS 选择器,那么了解 Jsoup 也支持 XML 可能会更好。
更新:好的,这显然是一个非常有争议的答案。然而,当您只想选择节点值时,它最终可能比 Xpath 更容易且更简洁。 Jsoup API 非常灵活。让我们举一个更具体的例子。假设你有一个如下所示的 XML 文件:
那么你可以像下面这样遍历它:
输出
Update 2:从 2012 年 3 月发布的 Jsoup 1.6.2 开始,XML 解析被官方支持Jsoup API。
If you're familiar with CSS selectors on HTML, it may be good to know that Jsoup supports XML as well.
Update: OK, that was given the downvote apparently a very controversial answer. It may however end up to be easier and less verbose than Xpath when all you want is to select node values. The Jsoup API is namely very slick. Let's give a bit more concrete example. Assuming that you have a XML file which look like this:
Then you can traverse it like follows:
which outputs
Update 2: since Jsoup 1.6.2 which was released March 2012, XML parsing is officially supported by the Jsoup API.
AFAIK java 中的所有 xml 查询都是非类型安全的,并且大多数与 java 1.3 兼容。也就是说,我最喜欢的解析器/生成器是 xml pull 解析器 (xmlpp) 样式解析器。我相信如果您使用 1.6,java 有 XmlStreamReader 和 XmlStreamWriter,它们几乎与 xmlpp 库相同。我特别喜欢的是,我可以编写一个 getFoo 方法,它接受一个流读取器并从中提取并返回一个 Foo 对象。它是 DOM 和 SAX 之间最好的一种。我认为有些人可能将其称为 StAX。
我有点胡言乱语,所以我现在要退出
AFAIK all of the xml queries in java are non-typesafe and most are java 1.3 compatible. That said my favorite parser/generator is the xml pull parser (xmlpp) style parser. I believe java has XmlStreamReader and XmlStreamWriter if you're using 1.6 which are almost the same as the xmlpp library. I especially like that I can write a method getFoo that takes a stream reader and pulls from it and returns a Foo object. It's sort of the best between DOM and SAX. I think it may be referred to as StAX by some.
I'm getting a little ramble-y so I'm quitting now