Php 需要xpath 1.0来匹配id为“0”的选项;收件人-5342647-地址“;
我在php中遇到xpath查询语法问题,该查询试图匹配具有以下格式的id属性的html select元素: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
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,你来统治吧!工作得很有魅力。非常感谢!