Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP返回XML字符串,其中属性中添加的值缺少值_Php_Xml_Xml Parsing_Html Parsing - Fatal编程技术网

PHP返回XML字符串,其中属性中添加的值缺少值

PHP返回XML字符串,其中属性中添加的值缺少值,php,xml,xml-parsing,html-parsing,Php,Xml,Xml Parsing,Html Parsing,我必须解析电子邮件中的HTML和“HTML”。我已经成功地创建了一个函数来清除大多数错误,例如元素的不正确嵌套 我试图确定如何最好地解决缺少值的HTML属性问题。我们必须最终将所有内容解析为XML,因此格式良好的HTML也是必须的 清洁功能开始时非常简单: $xml = explode('<', $xml); 我们不在乎这些属性是什么;我们的目标只是修复XML,使其格式良好,如下字符串所示: $s = 'p obnoxious="true" nonprofession

我必须解析电子邮件中的HTML和“HTML”。我已经成功地创建了一个函数来清除大多数错误,例如元素的不正确嵌套

我试图确定如何最好地解决缺少值的HTML属性问题。我们必须最终将所有内容解析为XML,因此格式良好的HTML也是必须的

清洁功能开始时非常简单:

$xml = explode('<', $xml);
我们不在乎这些属性是什么;我们的目标只是修复XML,使其格式良好,如下字符串所示:

$s = 'p obnoxious="true" nonprofessional="true" style="wrong: lulz-immature" dunno="true">Some paragraph text';
我们对
attribute=“attribute”
不感兴趣,因为这只是额外的工作(大多数电子邮件都是琐碎的),所以我们只想为每个缺少值的属性添加
=“true”
,以防止客户端浏览器上的XML解析器因其他人的琐事而失败

正如我前面提到的,我们只需要修复缺少值的属性,我们需要返回一个字符串。至此,所有其他格式错误的XML问题都得到了解决。我不确定该从哪里开始,因为这个话题太乱了。所以

  • 我们可以将整个XML字符串作为一个整体发送,以进行解析,并使用一些内置库作为字符串返回。如果此选项假定XML格式良好,并具有正确的XML声明(
  • 我们愿意手动创建一个函数来解决我们遇到的任何问题,尽管我们对构建一个验证器不感兴趣,因为我们在1997年收到了很多“HTML”
  • 我们将XML作为单个字符串或数组(由您选择)使用;我们显然不是在处理文件
我们如何通过合理的努力确保XML字符串(部分或全部)作为包含所有属性值的字符串返回?

可能会解决您的问题:

$doc = new DOMDocument('1.0');
$doc->loadHTML('<p obnoxious nonprofessional style=\'wrong: lulz-immature\' dunno>Some paragraph text');

echo $doc->saveXML();
$doc=新的DOMDocument('1.0');
$doc->loadHTML(“某些段落文本”);
echo$doc->saveXML();
上述代码将产生以下输出:

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p obnoxious="" nonprofessional="" style="wrong: lulz-immature" dunno="">Some paragraph text</p></body></html>

一些段落文本


如果需要,您可以将每个
=”
替换为
=“true”
,但输出已经是有效的XML。

如果您不关心属性及其值,为什么不干脆把它们全部删除?@JackFleeting因为这很可能是一个集而忘之的实现,在未来几年或几十年内,它将被用于无数的电子邮件中,我宁愿犯一个谨慎的错误。不过,我至少在精神上同意你的看法。您的示例很有效,我现在正在对整个XML输出进行测试…我必须花足够的时间确保它不是死路一条,并且。。。不是!接受和+1为我节省了至少一周的疯狂;非常感谢。不客气:)
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p obnoxious="" nonprofessional="" style="wrong: lulz-immature" dunno="">Some paragraph text</p></body></html>