我试图获得具有相同ID的每个项目,即使它们没有相同的日期。
例如,我输入ID41
,然后它将从包含以下项目的文档中找到匹配的项目:
<item>
<name>Abc</name>
<id>41:2021-10-12</id>
</item>
<item>
<name>Bca</name>
<id>41:2021-10-13</id>
</item>
<item>
<name>Def</name>
<id>42:2021-10-12</id>
</item>
<item>
<name>Fed</name>
<id>42:2021-10-13</id>
</item>
这是我尝试过的:
$trainIdDate = $trainId.':/[0-9]{4}-[0-9]{2}-[0-9]{2}/';
if ($xpath->evaluate("count(self::*[id = '$trainIdDate']) > 0", $item)) {
如果我这样做就可以了:
$trainIdDate = $trainId.':2021-10-12';
if ($xpath->evaluate("count(self::*[id = '$trainIdDate']) > 0", $item)) {
您可以将id视为以列车id开头的字符串,后面跟着一个冒号。
$trainID = 42;
$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);
$expression = "//item[starts-with(id, '$trainID:')]";
foreach ($xpath->evaluate($expression) as $item) {
var_dump(
[
$xpath->evaluate('string(name)', $item),
$xpath->evaluate('string(id)', $item),
]
);
}
XPath 1.0不支持正则表达式。
使用XPath 2.0+,您可以执行
count(self::*[matches(id, '[0-9]{4}-[0-9]{2}-[0-9]{2}]') > 0
但是PHP默认的XPath引擎只支持1.0。