【发布时间】:2017-03-24 17:59:27
【问题描述】:
我想使用 Jsoup css 选择器返回具有特定命名空间的所有元素,例如 <server:cpu> <server:memory>。
Document doc = Jsoup.parse("<server:cpu> <server:memory>");
Elements el = doc.select("sever|*");
但这会返回一个Could not parse query 异常
此文档https://jsoup.org/apidocs/org/jsoup/select/Selector.html 说您可以使用:
*|任何命名空间 ns 中的 E 类型的 E 元素
但我想做相反的事情:在命名空间 ns 中获取任何类型的元素。这可能吗?
编辑:
我不再收到异常,但是在执行 doc.select("sever|*"); 后我得到了一个空的 Elements 对象
【问题讨论】:
-
我无法重现此问题。同样在引用的行下方,我们可以看到
ns|E elements of type E in the namespace ns,这表明sever|*应该可以工作。 BTWJsoup.parse("file.xhtml");不会尝试查找和解析file.xhtml文件,而是将"file.xhtml"视为需要解析的原始数据。 -
也许您使用的是旧版本的 Jsoup。它似乎正在处理
1.10.1和1.10.2。 -
@Pshemo "Jsoup.parse("file.xhtml");"只是一个例子。我会修复它以解决您的问题。然而,
suggest server|* should work并没有确认任何事情。我已经试过了,还是不行。 -
@Pshemo 我使用的是 1.10.2 版
-
根据您的实际用例,可能的解决方案可能是创建您自己的迭代器,它将遍历所有节点并检查标签名称是否以
server:开头。如果是,则将此类元素/节点添加到包含此类元素的列表中。这是一个例子stackoverflow.com/a/23766900。