我使用一个 API 返回从事项目的员工。
工作人员按以下格式交付
<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 不支持 XPath 2.0,因此不能使用 matches
或 ends-with
来简化此特定查询。但是,有一个使用 substring
和 string-length
的解决方法:
/projects/project/field[starts-with(@name, 'employee') and substring(@name, string-length(@name) - string-length('_id') + 1) = '_id']
这说"把所有以employee
开头,以_id
结束的field
给我"。在野外,您可能会遇到不需要的匹配(例如,"employees_id"),但对于示例数据,这是有效的。演示。
如果 PHP 曾经有过 XPath 2.0,那么这个表达式将符合你的需要:
/projects/project/field[matches(@name, 'employeed+_id')]