Php 需要xpath 1.0来匹配id为“0”的选项;收件人-5342647-地址“;

Php 需要xpath 1.0来匹配id为“0”的选项;收件人-5342647-地址“;,php,xpath,xpath-1.0,Php,Xpath,Xpath 1.0,我在php中遇到xpath查询语法问题,该查询试图匹配具有以下格式的id属性的html select元素: recipients-1234567-address id的数字部分将更改,并且长度可能不总是相同。以下是我迄今为止所尝试的: $select_el = $xpath->query(".//select[@id[ starts-with(., 'recipients-') A

我在php中遇到xpath查询语法问题,该查询试图匹配具有以下格式的id属性的html select元素:

recipients-1234567-address
id的数字部分将更改,并且长度可能不总是相同。以下是我迄今为止所尝试的:

$select_el = 
   $xpath->query(".//select[@id[
                         starts-with(., 'recipients-')
                         AND
                         substring-before(substring(.,11),'-') = number(substring-before(substring(.,11),'-'))
                         AND
                         substring-after(substring-after(.,'-'),'-') = 'address' 
                         ]]");
我认为这个问题可能与我的节点上下文有关,所以我也尝试了这个变体

$select_el = 
   $xpath->query(".//select[
                         starts-with(@id, 'recipients-')
                         AND
                         substring-before(substring(@id,11),'-') = number(substring-before(substring(@id,11),'-'))
                         AND
                         substring-after(substring-after(@id,'-'),'-') = 'address' 
                         ]");

这是我第一次使用复杂的xpath表达式,所以我不确定我在这里是否偏离了基准。xpath查询必须坚持有效的xpath 1.0语法。任何帮助都将不胜感激

另一种方法是尝试:

//select[translate(@id,'0123456789','')='recipients--address']

我会在最后2个测试中尝试这些测试:
number(前面的子串(后面的子串(@id,'recipients-'),'-address'))>0和后面的子串(后面的子串(@id,'recipients-'),'-address')='address'
Dude,你来统治吧!工作得很有魅力。非常感谢!