【发布时间】:2022-01-18 12:57:35
【问题描述】:
我正在编写一个脚本来解析this XML。
我想用DOMDocument 和DOMXpath 解析所有<Contents> 节点。但由于某种原因,我尝试的所有 XPath 查询都失败了。
我的代码:
<?php
$apiUrl = 'https://chromedriver.storage.googleapis.com/?delimiter=/&prefix=98.0.4758.48/';
$xmlContents = file_get_contents($apiUrl);
if (!$xmlDom->loadXML($xmlContents)) {
throw new \Exception('Unable to parse the chromedriver file index API response as XML.');
}
$xpath = new \DOMXPath($xmlDom);
// **I tried several $query values here**
$fileEntries = $xpath->query($query, null, false);
if (!$fileEntries instanceof \DOMNodeList) {
throw new \Exception('Failed to evaulate the xpath into node list.');
}
echo "There are {$fileEntries->length} results\n";
foreach ($fileEntries as $node) {
/** @var \DOMNode $node */
var_dump($node->nodeName);
}
XPath $query 我试过了:
/ListBucketResult/Contents/Contents//Contents
所有这些结果都在“有 0 个结果”中。
如果我在 $query 中使用 *,它将列出 <ListBucketResult> 根节点内的所有节点:
There are 10 results
string(4) "Name"
string(6) "Prefix"
string(6) "Marker"
string(9) "Delimiter"
string(11) "IsTruncated"
string(8) "Contents"
string(8) "Contents"
string(8) "Contents"
string(8) "Contents"
string(8) "Contents"
简单的方法是使用nodeName 属性过滤节点。但我确实想知道我的 XPath 查询出了什么问题。我错过了什么?
【问题讨论】: