我对正在发送的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>
我正在尝试解析这个问题。
答案 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>