1

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

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

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

simplexml_load_string($xml);

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

提前致谢!

4

3 回答 3

0
if (preg_match("/<\\?xml.*\\?>.*/", $xml, $matches)) {
    $xml = $matches[0];
}
于 2012-05-20T08:22:59.970 回答
0

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

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

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

于 2012-05-20T08:31:12.170 回答
0

快速单线。

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

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

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

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

于 2012-05-20T18:13:08.107 回答