java - 当 XML 中有多个命名空间时,如何 getChildText() 具有命名空间的节点?

标签 java xml xpath jdom

我想使用 getChildText() 从几层深度的节点获取文本。文件中有两个命名空间。下面的语法不起作用,并将 textToGet 设置为 null

 String textToGet = root.getChildText("ns1:Customer/ns1:Address/ns1:Street/ns2:Streetname");

我知道有一种替代方法,首先获取子元素,然后获取其文本,但我想使用单行代码。

此外,最好不要链接 getChild(),因为某些元素不能保证位于文件中。

最佳答案

你不可能把它变成一句俏话......

考虑使用 XPaths...JDOM 2.x 应该对此有所帮助:

XPathExpression<String> xpe = XPathFactory.instance().compile(
    Filters.fstring(), "ns1:Customer/ns1:Address/ns1:Street/ns2:Streetname",
    null, namespace_ns1, namespace_ns2);
String textToGet = xpe.evaluateFirst(root);

(textToGet 可能为 null)

编辑,上面的 XPath 表达式实际上返回一个元素...您应该将“/text()”添加到 XPath 的末尾,或者将 textToGet 更改为 String(以及过滤器)。

罗尔夫

关于java - 当 XML 中有多个命名空间时,如何 getChildText() 具有命名空间的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844836/

相关文章:

xml - 建议 xpath 检查相同类型的嵌套元素中的第一个 'text' 节点

java - 为什么boolean一开始就设置为false,代码对吗?

java - 如何修复 UnfinishedStubbingException

java - Android模拟器不显示存储的图像

Python 和 ElementTree : return "inner XML" excluding parent element

C# .NET - 是否有一种简单的方法可以通过单个 ZIP 文件中的 XML 文件集合查询相同的 XML 节点?

XSLT/XPath : No upper-case function in MSXML 4. 0?

java - 来自 LocalSessionFactoryBuilder 的 NullPointerException

java - Spring 和 SWT 可以一起用于 Java 桌面应用程序吗?

java - 是否可以仅更改 TextView 的一部分?