代码之家  ›  专栏  ›  技术社区  ›  Rob Wells

xpath:如何匹配属性中的一类字符?

  •  0
  • Rob Wells  · 技术社区  · 14 年前

    我有以下XML片段:

    ...
    
    <Setting name="HOST1">server1</Setting>
    <Setting name="HOST2">server2</Setting>
    <Setting name="HOST3">server4</Setting>
    <Setting name="HOST4">server8n12</Setting>
    ...
    <!-- Many more such declarations all with the attribute of the form "HOSTNN" -->
    

    我正在使用libxml查找与主机匹配的节点

    my $dom = XML::LibXML->load_xml(location => $xml)
        or die "Unable to create LibXML object";
    my $root = $dom->getDocumentElement();
    
    my @hostnames = $root->findnodes('//Setting[contains(@name,"HOST")]');
    

    是否可以在xpath表达式中指定类似于在regexp中指定的字符类?例如,perl regexp:

    /^HOST\d+?$/
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   user357812    14 年前
    //Setting[starts-with(@name,"HOST")]
             [translate(substring-after(@name,"HOST"),
                        "0123456789",
                        "")=""]
    

    编辑 :我没有看到限定符。以上将匹配 Setting[@name="HOST"] . 更严格地说:

    //Setting[starts-with(@name,"HOST")]
             [number(substring-after(@name,"HOST")) = 
              substring-after(@name,"HOST")]
    

    编辑2 :上述要求不够严格(将与“host2.1”匹配)。对不起的。

    //Setting[starts-with(@name,"HOST")]
             [substring-after(@name,"HOST")]
             [translate(substring-after(@name,"HOST"),
                        "0123456789",
                        "")=""]
    
        2
  •  0
  •   zzzzBov    14 年前

    我的xpath有点生疏,但我认为这可能有效(或者我正在将css与xpath结合起来)。

    Setting[@name^="HOST"]