【问题标题】:How to get the w:t content provided a w:p child in xml using xpath如何使用 xpath 在 xml 中获取 w:t 内容提供的 w:p 子项
【发布时间】:2014-07-04 06:28:47
【问题描述】:

我需要检查 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 节点

【问题讨论】:

    标签: java xml xpath openxml domparser


    【解决方案1】:

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

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

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

    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;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多