如何使用 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>
我正在尝试使用以下方式加载 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>