使用regex和xpath求值来查看每个日期



我试图获得具有相同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。

相关内容

  • 没有找到相关文章

最新更新