PHP XPath 中的句子中间通配符



我使用一个 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 结尾的字段?我见过使用 containsstart-with 的函数,但没有一个可以帮助我。

我试过$object->xpath('field[@name="employee*_id"]')但没有运气。

由于 PHP 不支持 XPath 2.0,因此不能使用 matchesends-with 来简化此特定查询。但是,有一个使用 substringstring-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')]

最新更新