php xpath中的中间通配符
问题描述:
我使用返回正在处理项目的员工的API。php xpath中的中间通配符
工人们正在按以下格式
<projects>
<project>
<field name="employee1_id" format="Long">1</field>
<field name="employee1_name" format="string">Bob</field>
<field name="employee2_id" format="Long">2</field>
<field name="employee2_name" format="string">Ben</field>
<field name="employee3_id" format="Long">3</field>
<field name="employee3_name" format="string">Bill</field>
</project>
</projects>
如何使用通配符来查找所有员工ID和省略不与_id
结束任何其他领域交付?我见过使用contains
和start-with
的函数,但其中没有一个可以帮助我。
我试过$object->xpath('field[@name="employee*_id"]')
但没有运气。
答
由于PHP doesn't have XPath 2.0 support,您不能使用matches
或ends-with
来简化此特定查询。然而,有一个变通使用substring
和string-length
:
/projects/project/field[starts-with(@name, 'employee') and substring(@name, string-length(@name) - string-length('_id') + 1) = '_id']
这是说“给我所有field
与employee
开始和结束_id
。”在野外,您可能会遇到不合需要的匹配(例如,“employees_id”),但对于示例数据,这是有效的。 Demo.
是PHP曾经拥有的XPath 2.0,那么这个表达式将匹配您的需要:
/projects/project/field[matches(@name, 'employee\d+_id')]
我的坏,有几个字段与employee1_启动,但我只是在_id感兴趣。我已经更新了这个问题。是否有可能结合与结束 - 与? –
'ends-with'是XPath 2.0。但是,有一个解决方法。即将更新。 – bishop
你去了哪里,这再次与样本数据一起工作。 – bishop