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