#java #xml #xpath #openxml #domparser
#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: t-узел из дочерних элементов w: p
Ответ №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;
}
});