使用preg_match提取XML数组内双引号包裹的图片URL失败如何解决
代码问题分析
- 错误1:
xpath()方法返回的是包含多个SimpleXMLElement对象的数组,不能直接作为字符串传入preg_match(),必须先遍历每个PICTURE节点的PIC内容 - 错误2:正则规则匹配逻辑错误:原规则
@SRC=(.*)width@使用贪婪匹配.*会得到多余内容,且没有匹配SRC后的双引号边界,无法准确提取URL - 错误3:
preg_match()返回的匹配结果是字符串数组,不是XML节点对象,不能用->PIC的方式取值 - 错误4:
$display变量未初始化就直接进行拼接操作,会触发PHP未定义变量警告
修正后代码
public function xmlParserPICtn():string { // 初始化输出变量 $display = ''; // xpath查询得到所有符合条件的PICTURE节点数组 $valuesPICtn = $this->xml->xpath("//OBJEKT[@ID='91727']//PICTURE"); // 修正正则:匹配SRC="和"之间的内容,U代表非贪婪匹配,i兼容小写src写法 $searchpattern = '@SRC="(.*?)"@i'; // 遍历每个PICTURE节点 foreach ($valuesPICtn as $pictureNode) { // 强制转字符串得到PIC节点内的HTML内容 $picContent = (string)$pictureNode->PIC; // 匹配图片URL if (preg_match($searchpattern, $picContent, $matches)) { $imgUrl = $matches[1]; $display .= '<li>'; // 可根据需求调整为直接输出URL或者img标签 $display .= '<img src="'.htmlspecialchars($imgUrl).'" alt="展示图">'; $display .= '</li>'; } } return $display; }
内容的提问来源于stack exchange,提问作者bruno2000
相关产品推荐
相关产品推荐

