让 PHP 确认 XML 错误


Getting PHP to acknowledge XML errors

我对发送的XML提要感到有些悲伤。我知道这是无效的,但是发送程序的开发周期如此之长,以至于不值得等待他们能够纠正错误。所以我正在寻找一种解决方法,某种方法可以让 PHP 让我读取 XML 并合并/删除无效的属性条目,同时保留所有其他属性条目。

错误是我在XML节点上有重复的属性。我一直在使用simpleXML来读取文件并将它们处理成有用的值,但是这一行只是彻底破坏了系统。有问题的 XML 如下所示

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

我真正想要的是 C# 的 PHP 等价物。MoveToNextAttribute() 在 XML 读取器上。我似乎找不到任何在出现重复属性时不会爆炸的东西。

有人帮忙吗?

答案链接到解决XML本身中的字符错误,例如&不显示为&。这里的问题是 XML 的结构被破坏了,而不是内容。该线程中的答案返回

 parser error : Attribute attr1 redefined

当与 XML 一起显示时

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

这就是我试图解析的内容。

您可以使用 tidy 来清理您的输入:

<?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>