【发布时间】:2021-07-09 14:35:45
【问题描述】:
如果我有一个 DOMDocument 并且我想将它解析为一个字符串,我如何确保属性将按某种确定性/规范化顺序排序(根据属性名称按字典顺序排序会很好)?
例如,我怎样才能打印equal 而不是notequal?
$dom = new DOMDocument();
$dom->loadXML('<tag a="a" b="b"/>');
$dom2 = new DOMDocument();
$dom2->loadXML('<tag b="b" a="a"/>');
echo $dom->saveXML() === $dom2->saveXML() ? "equal" : "notequal";
根据documentation,saveXML 唯一支持的选项是LIBXML_NOEMPTYTAG。
【问题讨论】:
-
除了你的例子,请问你为什么要这样做?通常属性的顺序是无关紧要的。
-
@KIKO Software 在我的情况下,它背后的原因非常愚蠢(试图以最少的更改来修复遗留代码)但总的来说,我认为问题并不那么愚蠢,正如您在this answer Java 中的类似问题
-
我没有问“为什么”,因为我认为这个问题很愚蠢,我问它是否有替代方法。人们经常只问他们想做什么,而不解释“为什么”。例如,如果您问我们如何以最少的更改修复遗留代码,您可能会对答案感到惊讶。当然,您需要提供代码、您想要更改的内容以及您的尝试。如果您的尝试是正确的方法,人们会帮助您改进它,但可能有更好的方法您甚至没有想到。
-
在当前问题的情况下,您在
saveXMS()的选项中寻找答案,而我认为在保存它们之前对dom节点进行排序更有意义。
标签: php xml domdocument