在Java的XML文档中按属性查找元素,并获取同一元素中另一个属性的值

2024-10-01 15:48:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是把一些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库

谢谢


Tags: 对象代码namenodeuivaluedisplayelement
1条回答
网友
1楼 · 发布于 2024-10-01 15:48:57

传递XPathConstants.NODE不会导致evaluate返回NodeList,而是导致方法返回单个节点。class documentation精确地描述了每个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();

因为您只需要节点的字符串值,所以可以使用two-argument evaluate method,而忽略XPathConstants值:

String name = xPath.evaluate("DIAttribute[@name='ui_display_name']/@value", element);

只会找到作为element的直接子级的DIAttribute元素。如果要搜索element以下所有级别的所有diaAttribute子代,请在XPath表达式中使用.//

String name = xPath.evaluate(".//DIAttribute[@name='ui_display_name']/@value", element);

相关问题 更多 >

    热门问题