让PHP承认XML错误

时间:2016-01-19 15:33:31

标签: php xml

我对正在发送的XML Feed感到悲痛。我知道它是无效的,但发送程序的开发周期是不值得等待它们能够纠正错误。所以我正在寻找一个解决方法,一些方法让PHP让我读取XML并合并/删除无效的属性条目,同时保留所有其他条目。

错误是我在XML节点上有重复的属性。我一直在使用simpleXML来读取文件并将它们处理成有用的值,但这一行只是彻底打破了系统。违规的XML看起来像这样

<dCategory dec="1102" dup="45" dup="4576" loc="274" mov="31493" prf="23469" unq="240031" xxx="7861" />

我真正想要的是在XML阅读器上使用PHP等同于C#的.MoveToNextAttribute()。当呈现重复属性时,我似乎无法找到任何不会爆炸的东西。

有人帮忙吗?

答案与XML本身的字符中的地址错误相关联。例如&安培;不出现和&amp ;.这里的问题是XML的结构被破坏,而不是内容。该线程中的答案返回

 parser error : Attribute attr1 redefined

提供XML

<open-1 attr1="atr1" attr1="atr1">Text</open-1>

我正在尝试解析这个问题。

1 个答案:

答案 0 :(得分:1)

您可以使用整洁来清理输入:

<?php

$buffer = '<?xml version="1.0" encoding="UTF-8"?><open-1 attr1="atr1" attr1="atr1">Text</open-1>';

$config = [
 'indent' => true,
 'output-xml' => true,
 'input-xml' => true,
];

$tidy = tidy_parse_string($buffer, $config, 'UTF8');
$tidy->cleanRepair();
echo $tidy;

将输出:

 <?xml version="1.0" encoding="utf-8"?>
 <open-1 attr1="atr1">Text</open-1>