我有一个XML文件,比如说:
@Provider
public static class DebugMapper implements ExceptionMapper<Throwable> {
@Overrride
public Response toResponse(Throwable e) {
e.printStackTrace();
return Response.serverError().build();
}
}
@Override
public Application configure() {
ResourceConfig config = new ResourceConfig(..);
config.register(DebugMapper.class);
}
如您所见,有许多具有不同属性的子节点。为了节省时间,我想使用我之前知道的属性来查找特殊节点,并且我想使用它的内部节点。
例如,在上面的XML文件中,我正在寻找使用其属性的<root_node + attribute>
<child_node1 + attribute>
<node1_2 + attribute>
<node1_3>
<node1_4 + attribute>
TEXT COME HERE
</node1_4>
</node1_3>
</node1_2>
</child_node1>
<child_node2 + attribute>
<node2_2 + attribute>
<node2_3>
<node2_4 + attribute>
TEXT COME HERE
</node2_4>
</node2_3>
</node2_2>
</child_node2>
<child_node3 + attribute>
<node3_2 + attribute>
<node3_3>
<node3_4 + attribute>
TEXT COME HERE
</node3_4>
</node3_3>
</node3_2>
</child_node3>
</root_node3>
,然后想要在变量中保存child_node2
的属性。
我的问题只是知道如何直接进入所需节点(此处为node2_4
),然后保存其孙子的属性。
我希望这能清楚地解释我的问题。
答案 0 :(得分:1)
如果您有<child_node myatt="some_value">
之类的内容,那么xpath
的语法就是:
findnodes('//child_node[@my_att]') # find all with this attribute.
findnodes('//child_node[@my_att="some_value"]') #find this specific instance.
您可以菊花链findnodes
,但要在当前选择标准内找到:
foreach my $element ( $xml -> findnodes('//child_node[@my_att="some_value"]') ) {
$element -> findnodes('//node2_4[@attribute="value"]'); #within this
}
不幸的是,我不能更具体,因为您的示例XML不是有效的,也没有准确地指出哪个&#39;&#39;你想从中检索。
您还可以复合xpath元素:
//child_node[@my_att="some_value"]/somechild/someotherchild[@fish_att]