我的任务是将我的一些python代码转换为java。
在原始中有很多类似的操作:
name = element.find('*/DIAttribute[@name="ui_display_name"]').attrib['value']
其中元素是lxml.etree.Element
对象。
在Java中,我这样做是为了获得相同的值:
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodesName = (NodeList) xPath.evalute("DIAttribute[@name='ui_display_name']", element, XPathConstants.NODE);
if nodesName.getLength() > 0 {
Node node = nodesName.item(0);
name = node.getAttributes().getNamedItem("value");
}
我做对吗?有更好的方法吗?我正在使用org.w3c.dom
对象,以及禁止使用其他XML库的功能。
谢谢!
传递xpathconstants.node不会导致 evaluate
返回节点符,而是导致返回单个节点的方法。类文档准确地描述了每个XPathConstant字段将返回哪种类型的对象。
Node node = (Node) xPath.evaluate("DIAttribute[@name='ui_display_name']", element, XPathConstants.NODE);
属性也是文档节点,因此您可以将代码简化为单个XPath表达式:
Node node = (Node) xPath.evaluate("DIAttribute[@name='ui_display_name']/@value", element, XPathConstants.NODE);
String name = node.getNodeValue();
由于您只需要节点的字符串值,因此可以使用两项评估方法,省略XPathConstants值:
String name = xPath.evaluate("DIAttribute[@name='ui_display_name']/@value", element);
只会找到element
的直接子女的diattribute元素。如果要在element
以下的所有级别上搜索所有diattribute后代,请在XPath表达式中使用.//
:
String name = xPath.evaluate(".//DIAttribute[@name='ui_display_name']/@value", element);