删除 xml 标记之外的文本 - PHP


Remove text outside xml tags - PHP

有时我在XML中收到xml标记之外的文本,如下所示:

Bad command error. XYZ. Some more text<?xml version="1.0" encoding="utf-8"?><xml></xml>

这将在 php 中返回错误。因为我正在使用这个函数来读取 xml:

simplexml_load_string($xml);

有没有办法删除xml标签之外的文本,这样我就不会在xml中出现错误?

提前感谢!

if (preg_match("/<''?xml.*''?>.*/", $xml, $matches)) {
    $xml = $matches[0];
}

试试这段代码,它只会提取 xml。

$lpos = strpos('<?xml', $xml);
$xml = substr($xml, $lpos, strrpos('>', $xml) - $lpos +  1);

但它有一些限制,例如:xml后面可以有">"字符。另外,我建议尝试tidy_repair_string()

快速单行。

$xml = preg_replace("/^.+<''?xml/", "<?xml", $xml, 1);

将去除在字符串中找到的<?xml标记之前的任何字符。

但是,我想说的是,如果您遇到这样的格式不正确的XML,您应该尝试追踪格式错误的原因,而不仅仅是尝试解决它。

听起来首先生成XML的代码中存在一个令人讨厌的错误。如果是你的代码,你需要在那里解决问题,而不是回避问题。如果它来自第三方系统,您需要通知他们该错误。