PHP 返回 XML 字符串,并将值添加到属性缺失值

Posted

技术标签:

【中文标题】PHP 返回 XML 字符串,并将值添加到属性缺失值【英文标题】:PHP return XML string with values added to attributes missing values 【发布时间】:2021-03-30 20:27:07 【问题描述】:

我必须从电子邮件中解析 html 和“HTML”。我已经设法创建了一个函数来清除大多数错误,例如元素嵌套不当。

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

清洁功能开始很简单:

$xml = explode('<', $xml);

我们快速确定元素的开始和结束标签。

然而,一旦我们得到属性,事情很快就会变得非常混乱:

缺少值。 人们使用单引号而不是双引号。 属性值可能包含单引号。

这是一个我们必须解析的 HTML 字符串示例(p 元素):

$s = 'p obnoxious nonprofessional style=\'wrong: lulz-immature\' dunno>Some paragraph text';

我们确实关心这些属性是什么;我们的目标只是修复 XML,使其格式良好,如以下字符串所示:

$s = 'p obnoxious="true" nonprofessional="true" style="wrong: lulz-immature" dunno="true">Some paragraph text';

我们对attribute="attribute" 不感兴趣,因为这只是额外的工作(大多数电子邮件都是无聊的),所以我们只是对缺少值的每个属性附加="true" 感兴趣只是防止客户端浏览器上的 XML 解析器故障转移其他地方不做他们工作的人的琐事。

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

我们愿意将整个 XML 字符串作为一个整体发送以进行解析并作为字符串返回,并使用一些内置库。如果此选项假定 XML 具有正确的 XML 声明格式 (&lt;?xml version="1.0" encoding="UTF-8"?&gt;)。 我们愿意手动创建一个函数来解决我们遇到的任何问题,尽管我们对构建一个验证器并不感兴趣,就像我们在 1997 年收到的尖叫声一样多。 我们将 XML 用作单个字符串或数组(您的选择);我们明确处理文件。

我们如何通过合理的努力确保一个 XML 字符串(部分或全部)作为字符串返回,其中包含所有属性的值?

【问题讨论】:

如果你不关心属性和它们的值,为什么不干脆完全删除它们呢? @JackFleeting 因为这很可能是一个设置和忘记的实现,将在未来数年或数十年用于数以千计的电子邮件,所以我宁愿谨慎行事。不过,我至少在精神上同意你的看法。 ????︀ 【参考方案1】:

DOM extension 可以解决您的问题:

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

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。

【讨论】:

您的示例有效,我现在正在对整个 XML 输出进行尝试... 我必须花足够的时间来确保它不是死胡同...... 它不是! 已接受并 +1 为我节省了至少一周的疯狂;谢谢!

以上是关于PHP 返回 XML 字符串,并将值添加到属性缺失值的主要内容,如果未能解决你的问题,请参考以下文章

pandas 比较两个不同大小的数据帧映射值,并在缺失值时添加任意值

AJAX三种返回值方式

在 php 中将 XML 文档转换为数组时,有没有办法将其转换回来并将其保存为属性为元素的 XML 文件?

php 脚本读取xml文件并将项添加到db import object mcity

R语言删除包含缺失值的行并将字符数据列(character)转化为因子列(factor)实战

PHP XML RPC - 如何处理返回的数组