使用带有findnodes的atrribute查找特殊的子节点

时间:2015-10-28 14:36:10

标签: xml perl find xml-libxml

我有一个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),然后保存其孙子的属性。

我希望这能清楚地解释我的问题。

1 个答案:

答案 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]