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结束任何其他领域交付?我见过使用containsstart-with的函数,但其​​中没有一个可以帮助我。

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

由于PHP doesn't have XPath 2.0 support,您不能使用matchesends-with来简化此特定查询。然而,有一个变通使用substringstring-length

/projects/project/field[starts-with(@name, 'employee') and substring(@name, string-length(@name) - string-length('_id') + 1) = '_id'] 

这是说“给我所有fieldemployee开始和结束_id。”在野外,您可能会遇到不合需要的匹配(例如,“employees_id”),但对于示例数据,这是有效的。 Demo.

是PHP曾经拥有的XPath 2.0,那么这个表达式将匹配您的需要:

/projects/project/field[matches(@name, 'employee\d+_id')] 
+0

我的坏,有几个字段与employee1_启动,但我只是在_id感兴趣。我已经更新了这个问题。是否有可能结合与结束 - 与? –

+1

'ends-with'是XPath 2.0。但是,有一个解决方法。即将更新。 – bishop

+0

你去了哪里,这再次与样本数据一起工作。 – bishop