【发布时间】:2011-11-10 10:52:41
【问题描述】:
我们正在尝试生成一些命名空间的 XML(属性和所有),但是在 PHP 中输出带有 SimpleXML 和 DOMDocument 的前缀时,我们注意到了一些问题。这是我们的测试输出:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:a="http://default" xmlns:b="http://extra" xmlns="http://default">
<a:test_default>alpha</a:test_default>
<b:test_extra>bravo</b:test_extra>
</root>
我问的原因 - 我们想在命名空间中包含属性,但我们知道属性不占用其包含元素的命名空间。我们通常为我们的节点有一个默认的命名空间。因此,我们得出结论,还需要前缀命名空间声明。但是,当通过 SimpleXML 或 DOMDocument 生成 XML 时,从不向属性添加前缀。
有没有更好的方法?我们试图避免为 XML 中的每个元素添加前缀 - 利用默认值使内容更具可读性。
【问题讨论】:
-
!! “更具可读性”:XML 并不意味着可读。您构建树,调用库并将树发送到其他地方重建。按照设计,它应该可以工作,而且它是一个黑匣子。
-
@Nicholas 我认为说“XML 并不意味着可读”是不公平的。规范没有说明这一点,我认为如果它使内容更容易理解,防止多余的冗长是一个不好的目标。
-
作为文本格式只是一个方便的调试功能。如果您想要简短,请使用 zlib 或 gzip 或其他任何东西。如果您的库使用大量前缀,那么它是被允许的,如果它是有效的,那么弄乱它的输出不是您的事。如果您想使用其他可选的数据序列化方式来实现它,请自己实现它。 PHP 库的输出不是最干净的,我们都知道,但您选择 XML 输出是为了保证它可以在另一端被解析,而不是在路上被盯上。
-
XML 不是 HTML。委员会从未打算将其手动生成或人工阅读。这是机器对机器。您无法通过视觉可靠地解析它。如果您想阅读或编辑它,请在 Firefox 或任何 XML 编辑器中打开以获取树视图。我们的实现使用多少可选前缀与我们无关。我在这里非常粗鲁和苛刻,所以请不要被冒犯,但我宁愿为安全和可维护性说话而不是为了漂亮。
标签: php xml simplexml domdocument xml-namespaces