我想获取包含以下属性之一的每个子节点:type、ref、base。每个属性的值无所谓,我只是想检查该属性是否存在。
这就是我现在的做法:
private void addRequiredNodeAndChildren(Node n) {
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "*//*[@base or @ref or @type]";
XPathExpression expr = xpath.compile(expression);
NodeList referList = (NodeList) expr.evaluate(n, XPathConstants.NODESET);
..
}
此表达式工作正常,但在一种情况下,我没有得到所有预期的节点:
<xs:complexType name="ListElement">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:attribute name="transferMode" type="myprefix:dataTransferMode"
use="optional">
<xs:annotation>
<xs:documentation>Documentation for attribute
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
我希望得到具有上述表达式的节点,但不幸的是我没有得到它。将表达式更改为
//*[@base or @ref or @type]
也没有帮助,因为我从 XML 中获取了每个具有属性之一的节点,但我只想获取给定节点 n 的子节点。我也试过
*//*[@base] or *//*[@ref] or *//*[@type]
作为表达,但这也不起作用。
有谁知道如何解决我的问题?