使用 PHP 从新闻网站访问 XML 元素和名称空间

file_get_contents我使用和 尝试检索 xml 内容SimpleXMLElement,但我得到的 PHP 数组仅包含 XML 数据的父元素。

使用时simplexml_load_string我得到这个PHP 数组:


SimpleXMLElement Object

(

    [url] => Array

        (

            [0] => SimpleXMLElement Object

                (

                    [loc] => https://www.lemonde.fr/culture/article/2020/03/22/crise-sanitaire-malgre-les-annonces-du-gouvernement-les-intermittents-du-spectacle-restent-inquiets_6034031_3246.html

                    [lastmod] => 2020-03-12T20:00:12+01:00

                )


            [1] => SimpleXMLElement Object

                (

                    [loc] => https://www.lemonde.fr/climat/article/2020/03/22/l-eau-a-l-epreuve-des-changements-climatiques_6034029_1652612.html

                    [lastmod] => 2020-03-22T16:34:35+01:00<

                )


            [2] => SimpleXMLElement Object

                (

                    [loc] => https://www.lemonde.fr/journal-blouses-blanches/article/2020/03/22/journal-de-crise-des-blouses-blanches-la-consigne-est-de-se-cacher-quand-le-brancard-passe_6034028_6033712.html

                    [lastmod] => 2020-03-22T16:02:29+01:00

                )

我需要检索特定元素,那么如何才能访问它们呢?提前致谢!




炎炎设计
浏览 106回答 1
1回答

GCT1015

您可以使用 XPath 进入文档:$xml = simplexml_load_string($content);$xml->registerXPathNamespace('s', 'http://www.sitemaps.org/schemas/sitemap/0.9'); // xpath need to have an 'alias' to query the anonymous namespace$urls = $xml->xpath('//s:url'); // retrieve all url itemsforeach($urls as $url) // loop over each url item{&nbsp; &nbsp; $url->registerXPathNamespace('s', 'http://www.sitemaps.org/schemas/sitemap/0.9');&nbsp; &nbsp; // string conversion gives you only the content of the node&nbsp; &nbsp; $title = (string) $url->xpath('news:news/news:title')[0];&nbsp; &nbsp; $loc = (string) $url->xpath('s:loc')[0];&nbsp; &nbsp; $lastmod = (string) $url->xpath('s:lastmod')[0];&nbsp; &nbsp; $pubDate = (string) $url->xpath('news:news/news:publication_date')[0] ;&nbsp; &nbsp; echo $title . PHP_EOL;&nbsp;&nbsp; &nbsp; echo $loc . PHP_EOL ;&nbsp;&nbsp; &nbsp; echo $lastmod . PHP_EOL ;&nbsp;&nbsp; &nbsp; echo $pubDate . PHP_EOL;&nbsp;}//意味着您查看文档中任何位置的所有具有该名称的节点,single/意味着您查看该节点的直接子节点。您可以阅读 XPath 的文档来了解更多命令。XPath 返回节点的集合,因此我总是查询第一个元素[0](假设文档中只有一个这样的元素)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5