PHP XPath问题
有一个真正的Xpath问题的麻烦。我正在尝试将节点与某个值匹配 下面是一个示例XML片段 我试图匹配给定的MatchNumber节点值,以查看是否有两个或更多个节点。假设它存储在一个名为$data的变量中,我将使用下面的表达式。我已经有一段时间没有做过很多XPath了,因为现在大多数事情似乎都是JSON,所以请原谅任何新手的疏忽PHP XPath问题,php,xml,xpath,Php,Xml,Xpath,有一个真正的Xpath问题的麻烦。我正在尝试将节点与某个值匹配 下面是一个示例XML片段 我试图匹配给定的MatchNumber节点值,以查看是否有两个或更多个节点。假设它存储在一个名为$data的变量中,我将使用下面的表达式。我已经有一段时间没有做过很多XPath了,因为现在大多数事情似乎都是JSON,所以请原谅任何新手的疏忽 $doc = new DOMDocument; $doc->load($data); $xpath = new DOMXPath($doc); $result
$doc = new DOMDocument;
$doc->load($data);
$xpath = new DOMXPath($doc);
$result = $xpath->query("/CupRoundSpot/MatchNumber[.='1']");
我需要基本上匹配匹配号值为1的任何节点,然后确定结果长度是否大于1(即找到2个或更多)
非常感谢您的帮助。以下XPath:
/CupRoundSpot[MatchNumber = 1]
返回所有CupRoundSpot
节点,其中MatchNumber
等于1。您可以在PHP中进一步使用这些节点来处理它
执行:
count(/CupRoundSpot[MatchNumber = 1])
返回找到的
MatchNumber
等于1的curoundspot
节点总数。您的XML文档具有默认命名空间:xmlns=”http://www.fixtureslive.com/“
您必须在xpath元素上添加前缀,并在查询中使用(已注册)前缀
$xpath->registerNamespace ('fl' , 'http://www.fixtureslive.com/');
$result = $xpath->query("/fl:ArrayOfCupRoundSpot/fl:CupRoundSpot/fl:MatchNumber[.='1']");
foreach( $result as $e ) {
echo '.';
}
您必须注册名称空间。之后,可以使用Xpath
count()
函数。这样的表达式只适用于evaluate()
,而不适用于query()
query()
只能返回节点列表,不能返回标量值
$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('fl', 'http://www.fixtureslive.com/');
var_dump(
$xpath->evaluate(
'count(/fl:ArrayOfCupRoundSpot/fl:CupRoundSpot[number(fl:MatchNumber) = 1])'
)
);
输出:
float(2)
演示:
要迭代CupRoundSpot节点,只需使用foreach:
$nodes = $xpath->evaluate(
'/fl:ArrayOfCupRoundSpot/fl:CupRoundSpot[number(fl:MatchNumber) = 1]'
);
foreach ($nodes as $node) {
//...
}
干杯我试过运行,但仍然没有得到匹配/结果。非常令人沮丧$doc->loadXML($data);问题是什么工具!干杯,伙计们!干杯我试过运行,但仍然没有得到匹配/结果。非常令人沮丧!