Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl XPath:如何匹配属性中的一类字符?_Perl_Xpath_Libxml2 - Fatal编程技术网

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

Perl XPath:如何匹配属性中的一类字符?,perl,xpath,libxml2,Perl,Xpath,Libxml2,我有以下XML片段: ... <Setting name="HOST1">server1</Setting> <Setting name="HOST2">server2</Setting> <Setting name="HOST3">server4</Setting> <Setting name="HOST4">server8n12</Setting> ... <!-- Many more s

我有以下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" -->
是否可以在XPath表达式中指定类似于在regexp中指定的字符类?例如,Perl regexp:

/^HOST\d+?$/
编辑:我没有看到限定符。以上内容将与
设置[@name=“HOST”]
匹配。更严格地说:

//Setting[starts-with(@name,"HOST")]
         [number(substring-after(@name,"HOST")) = 
          substring-after(@name,"HOST")]
编辑2:上面的代码不够严格(它将匹配“HOST2.1”)。对不起

编辑:我没有看到限定符。以上内容将与
设置[@name=“HOST”]
匹配。更严格地说:

//Setting[starts-with(@name,"HOST")]
         [number(substring-after(@name,"HOST")) = 
          substring-after(@name,"HOST")]
编辑2:上面的代码不够严格(它将匹配“HOST2.1”)。对不起


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


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


@Alejandro,这会给主机一个匹配,在“主机”子字符串后面有两个数字吗?@Rob,会的
translate()
将第二个参数中出现的所有字符替换为第三个参数中的相应字符(本例中为空字符串)@Alej:+1,好主意。谢谢@LarsH和@Alejandro的原创帖子+给你们两个1。@Rob Wells:@LarsH是对的,但空字符串将被转换为空字符串。检查我的编辑以获得更严格的表达式。@Alejandro,酷!感谢您的更新,我现在使用的是v3.0版!干杯。@Alejandro,这会给在“主机”子串后面有两个数字的主机一个匹配吗?@Rob,会的
translate()
将第二个参数中出现的所有字符替换为第三个参数中的相应字符(本例中为空字符串)@Alej:+1,好主意。谢谢@LarsH和@Alejandro的原创帖子+给你们两个1。@Rob Wells:@LarsH是对的,但空字符串将被转换为空字符串。检查我的编辑以获得更严格的表达式。@Alejandro,酷!感谢您的更新,我现在使用的是v3.0版!干杯
//Setting[starts-with(@name,"HOST")]
         [number(substring-after(@name,"HOST")) = 
          substring-after(@name,"HOST")]
//Setting[starts-with(@name,"HOST")]
         [substring-after(@name,"HOST")]
         [translate(substring-after(@name,"HOST"),
                    "0123456789",
                    "")=""]
Setting[@name^="HOST"]