java - 如何获取 w :t content provided a w:p child in xml using xpath

标签 java xml xpath openxml domparser

我需要检查 w:p 的子元素中是否有 w:t 标签。 w:p 可以有 w:r、w:hyperlink、w:fldSimple 等作为子元素

<w:r>
   <w:t>
   a link 
   <w:t/>
</w:r>
<w:hyperlink r:id="rId4">
   <w:r>
      <w:rPr>
         <w:rStyle w:val="Hyperlink"/>
      </w:rPr>
      <w:t>Google</w:t>
   </w:r>
</w:hyperlink>

如果 w:p 的子级是 w:r,那么它将在下一级立即具有 w:t 标记,但如果 w:p 的子级是 w:hyperlink,那么 w:t 将不会是 w:hyperlink 的直接子级。

我编写的 x:path 查询是

Node tNode = (Node) xPath.evaluate("//t", pChildNode, XPathConstants.NODE);

其中 pChildNode 可以是 w:r、w:hyperlink 或 w:p 的任何其他有效子节点

但是这个 xpath 查询不会从 w:p 的子节点获取 w:t 节点

最佳答案

您没有使用任何命名空间。

Node tNode = (Node) xPath.evaluate("//w:t", pChildNode, XPathConstants.NODE);

在执行此操作之前,您必须使用 NamespaceContext 绑定(bind)正确的命名空间:

xpath.setNamespaceContext(new NamespaceContext() {
    @Override
    public Iterator getPrefixes(String arg0) {
        return null;
    }

    @Override
    public String getPrefix(String arg0) {
        return null;
    }

    @Override
    public String getNamespaceURI(String arg0) {
        if("w".equals(arg0)) {
            return "YOUR-NAMESPACE";
        }
        return null;
    }
});

关于java - 如何获取 w :t content provided a w:p child in xml using xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24567987/

相关文章:

Java 反射 : Why is it so slow?

java - 如何保持多个按钮的无限循环?

java - 如何在clojure中按时期分割

xml - 在 boolean 值上测试 =""总是返回 true

xml - 如何在 XSLT 中获取以下同级

Java GPA CALC 问题

android - AOSP AndroidManifest.xml

c# - 可以将 XSLT 样式表添加到序列化的 XML 文档吗?

javascript - 部分 xml 文件到 javascript 数组

html - 如何通过删除特定文本使用CSS或Xpath获取元素?