这是 XML 文件输出的示例 - 显然按比例缩小并且一些信息发生了更改:
<directory>
<company>
<id>5002</id>
<company_name>Clothing Store</company_name>
<address>123 street</address>
<latitude>51.123456</latitude>
<longitude>-113.12345432</longitude>
<phone>1234567890</phone>
<fax/>
<website/>
<logo_url/>
<categories>
<category>
<name>Retail Fashion</name>
<sub_categories>
<category_sub>
<id>5056</id>
<name>Her Style / Ladies Wear</name>
</category_sub>
</sub_categories>
</category>
</categories>
</company>
<company>
<id>5003</id>
<company_name>Hardware Store</company_name>
<address>123 street</address>
<latitude>51.123456</latitude>
<longitude>-113.12345432</longitude>
<phone>1234567890</phone>
<fax/>
<website/>
<logo_url/>
<categories>
<category>
<name>Retail</name>
<sub_categories>
<category_sub>
<id>5001</id>
<name>Hardware</name>
</category_sub>
</sub_categories>
</category>
</categories>
</company>
<company>...</company>
</directory>
所以,这就是问题所在。我有一个用于业务目录的 xml 文件。我需要根据类别对其进行文本搜索,并仅提取在其<company>
节点中具有这些类别的企业。所以,假设我搜索“零售”,我需要任何将“零售”作为类别的业务,但我需要返回节点内的所有子<company>
节点 - 所以,从<id>
到<categories>
实际上,我的一切工作正常,除非有多个类别共享一个特定的词。因此,我现在拥有的当前示例是“零售”——“零售”和“零售时尚”有一个类别——我做 xpath 的方式是从这两个类别中吸引所有业务,因为它不是在寻找整个单词,或进行任何正则表达式搜索。我有一种感觉,我需要使用matches
它,但还没有成功地正确实施它。我是一个完全的 xpath 菜鸟——我相信这是一个简单的答案,但我找不到一个很好的例子来说明我在任何地方都想做的事情——或者至少一个对我有用的例子。
这是我为 xpath 做的事情:
$results = $xml->xpath("//company[contains(categories/*,'Retail')]");
就像我说的,这将返回所有内容,除了它同时包含“零售”和“零售时尚”类别。