如何使用 SimpleXML 在 XML 中查找第一个 img



我有这个XML代码

<entry>
<p>11</p>
<p>22</p>
<p>33<img src="1.jpg"/></p>
<p>44</p>
</entry>

我想选择第一张图像并获取它的 src

问题是因为 img 并不总是在第三个孩子,所以它在里面<entry>但我不知道它到底在哪里,所以我需要搜索第一个图像而不是像这样找到。

 p[2]->img[src]
 $children->entry->img[src];
您可以使用

XPath 查找 <img> 标记并使用 //img/@src 提取 src 属性,该属性查找任何具有 src 属性的 img 元素(使用 @ 指示它是一个属性)...

$data = '<entry>
<p>11</p>
<p>22</p>
<p>33<img src="1.jpg"></img></p>
<p>44</p>
</entry>';
$xml = simplexml_load_string($data);
$image = $xml->xpath("//img/@src");
echo (string)$image[0];

会回声

1.jpg

由于xpath()将返回匹配项列表,因此您需要使用 [0] 将其限制为第一个匹配项,并且强制转换为字符串 ((string) ) 可以确保您有一个字符串,而不是任何形式的 SimpleXMLElement。

更新:

使用实际示例中的额外 XML 内容,还需要几个阶段来获取图像。需要定义一个默认命名空间,以允许您获取内容元素 - 其中包含您所需的数据。 然后对此数据进行一些操作(删除一些导致XML问题的HTML,因为它是一个文档片段,添加新的根元素)并将其加载到第二级XML中。 然后,您可以提取 src 属性。

$xml = simplexml_load_file("city.xml");
$xml->registerXPathNamespace("d", "http://www.w3.org/2005/Atom");
$content = $xml->xpath("//d:content");
foreach ( $content as $cont )   {
    $newXML = "<root>".(string)$cont."</root>";
    $newXML = str_replace(["&nbsp;", "allowfullscreen"], " ", $newXML);
    $xml2 = simplexml_load_string($newXML);
    $image = $xml2->xpath("//img/@src");
    foreach ( $image as $imgSrc ){ 
        echo (string)$imgSrc.PHP_EOL;
    }
}

最新更新