gpt4 book ai didi

PHP - 解析带有 HTML 元素的 XML

转载 作者:行者123 更新时间:2023-11-27 23:53:44 26 4
gpt4 key购买 nike

我正在尝试读取元素中包含 HTML 的 XML。它没有包含在 CDATA 标记中,这是个问题,因为我使用的任何 XML 解析器都试图将它解析为 XML。

XML 中的死点:

<item>
<title>Title text <img src="https://abs.twimg.com/emoji/v1/72x72/1f525.png" draggable="false" alt="🔥" aria-label="Emoji: Fire"></title>
</item>

错误信息:

Warning: XMLReader::readOuterXml(): (xml file here) parser error : Opening and ending tag mismatch: img line 1 and title in (php file here)

我知道如何从 XML 元素中获取 HTML,但解析器不喜欢它是一个开放标签这一事实,它找不到结束标签,所以它死了,我无法进一步了解。

现在,我实际上并不需要 <title>元素,所以如果有办法忽略它,那会起作用,因为我需要的信息只在 <item> 的两个子节点中。 parent 。

如果有人能找到解决此问题的方法,那就太好了。

更新

根据 Christian Gollhardt 的建议,我设法将 XML 加载到一个对象中,但我遇到了与之前相同的问题,我在从 <description> 获取 CDATA 时遇到问题。元素。

这是我应该得到的 CDATA:

<description>
<![CDATA[<a href="https://twitter.com/menomatters" >@menomatters</a> <a href="https://twitter.com/physicool1" >@physicool1</a> will chill my own &quot;personal summer&quot;. <img src="https://abs.twimg.com/emoji/v1/72x72/1f525.png" draggable="false" alt="🔥" aria-label="Emoji: Fire"><img src="https://abs.twimg.com/emoji/v1/72x72/2600.png" draggable="false" alt="☀️" aria-label="Emoji: Black sun with rays">]]>
</description>

这就是我的结局:

["description"]=>
string(54) "@menomatters will chill my own "personal summer". ]]>"

看起来又是关闭标签的问题?

最佳答案

看看DOMDocument .您可以直接使用它,或者您可以编写一个函数,这会给您一个干净的文档。


清理方法:

function tidyXml($xml) {
$doc = new DOMDocument();
if (@$doc->loadHTML($xml)) {
$output = '';
//Dom Document creates <html><body><myxml></body></html>, so we need to remove it
foreach ($doc->getElementsByTagName('body')->item(0)->childNodes as $child) {
$output .= $doc->saveXML($child);
}
return $output;
} else {
throw new Exception('Document can not be cleaned');
}
}

function getSimpleXml($xml) {
return new SimpleXMLElement(tidyXml($xml));
}

实现

$xml= '<item><title>Title text <img src="https://abs.twimg.com/emoji/v1/72x72/1f525.png" draggable="false" alt="�" aria-label="Emoji: Fire"></title></item>';
$myxml = getSimpleXml($xml);

$titleNodeCollection =$myxml->xpath('/item/title');

foreach ($titleNodeCollection as $titleNode) {
$titleText = (string)$titleNode;
$imageUrl = (string)$titleNode->img['src'];
$innerContent = str_replace(['<title>', '</title>'], '', $titleNode->asXML());

var_dump($titleText, $imageUrl, $innerContent);
}

尽情享受吧!

关于PHP - 解析带有 HTML 元素的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25312015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com