如何使用 PHP 加载 XML 文件及其注释

How to load XML file with its comments using PHP

我正在尝试使用以下方式加载 XML 文件:

$xml = simplexml_load_file('https://xxxxx/xxxxx.xml');

和 XML 文件有一些评论,您可以在下图中看到,我想在创建 table:

时使用评论中的数据

但是当我尝试 var_dump 数据时,我看到 ["comments"] 为:

["comment"]=>
  array(2) {
    [0]=>
    object(SimpleXMLElement)#5 (0) {
    }
    [1]=>
    object(SimpleXMLElement)#7 (0) {
    }
  }

问题是我如何检索评论的内容以便我可以使用其中给出的语言名称?

改用file_get_contents

$xml = file_get_contents('https://xxxxx/xxxxx.xml');

如果您需要 xml 加载到对象中,那么我认为您必须使用 DOMDocument():

$dom = new DOMDocument();
$dom->load('https://xxxxx/xxxxx.xml');
$xpath = new DOMXpath($dom);
$comment = $xpath->evaluate('string(//channel/item[1]/comment())');
echo $comment;

var_dump($xml); // showing comments

您将需要使用 DOMDocument,因为 SimpleXML 不适用于注释。您可以使用 XPath 找到您之后的评论(使用 normalize-space() 删除文本周围的空格)和 following-sibling 到 return 以下节点。最后一行只输出它找到的元素,你需要根据需要处理它(使用 [0] 因为 query 将 return 一个节点列表,你只需要第一个)。

$doc = new DOMDocument();
$doc->load($file);
$xp = new DOMXPath($doc);

$lang = "Finland";
$langPop = $xp->query("//comment()[normalize-space(.)='$lang']/following-sibling::*[1]");

echo $doc->saveXML($langPop[0]);

有一些示例数据...

<base>
    <!-- Finland -->
    <languagePopulation>Finland data
    </languagePopulation>
    <!-- England -->
    <languagePopulation>England data
    </languagePopulation>
</base>

会给

<languagePopulation>Finland data
    </languagePopulation>