删除xml标记外的文本 - PHP

时间:2012-05-20 08:16:50

标签: php xml error-handling

有时我会在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中出错?

提前致谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

但它有一些限制,例如:可以有'&gt;' xml之后的char。 我也建议您尝试tidy_repair_string()

答案 2 :(得分:0)

快速单行。

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

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

但是,我会说,如果你得到格式错误的XML,你应该试着找出格式错误的原因,而不是仅仅试图解决它。

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