Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.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 有一个默认名称空间(xmlns)和一个指向同一URI的前缀名称空间可以吗?_Php_Xml_Simplexml_Domdocument_Xml Namespaces - Fatal编程技术网

Php 有一个默认名称空间(xmlns)和一个指向同一URI的前缀名称空间可以吗?

Php 有一个默认名称空间(xmlns)和一个指向同一URI的前缀名称空间可以吗?,php,xml,simplexml,domdocument,xml-namespaces,Php,Xml,Simplexml,Domdocument,Xml Namespaces,我们试图生成一些名称空间的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

我们试图生成一些名称空间的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中的每个元素前面加前缀-使用默认值使内容更可读。

是的,这样做很好。例如,它通常在XSD中完成。

是的,这样做很好。例如,它通常在XSD中完成。

!!“更可读”:XML并不意味着可读。构建树,调用库,它将树发送到其他地方进行重构。按照设计,它应该可以工作,而且是一个黑匣子。@Nicholas我认为说“XML不应该是可读的”是不公平的。规范中没有说明这一点,我认为如果它使内容更容易理解,那么防止多余的冗长并不是一个坏的目标。文本格式只是一个方便的调试功能。如果你想简短,可以使用zlib或gzip或其他任何东西。如果你的库使用了很多前缀,那么,它是被允许的,如果它是有效的,你就不应该干扰它的输出。如果您想使用其他可选的序列化数据的方法来实现它,那么您可以自己实现它。我们都知道,PHP库并没有提供最干净的输出,但您选择XML输出是为了保证它可以在另一端被解析,而不是在另一端被大惊小怪。XML不是HTML。委员会从未打算手工制作或人工阅读。这是一台机器对一台机器。你无法通过视觉可靠地解析它。在Firefox或任何XML编辑器中打开以获取树视图,如果您想阅读或编辑它。我们的实现使用了多少可选前缀与我们无关。我在这里非常粗鲁和苛刻,所以请不要生气,但我宁愿为了安全和可维护性而不是漂亮而说话。!!“更可读”:XML并不意味着可读。构建树,调用库,它将树发送到其他地方进行重构。按照设计,它应该可以工作,而且是一个黑匣子。@Nicholas我认为说“XML不应该是可读的”是不公平的。规范中没有说明这一点,我认为如果它使内容更容易理解,那么防止多余的冗长并不是一个坏的目标。文本格式只是一个方便的调试功能。如果你想简短,可以使用zlib或gzip或其他任何东西。如果你的库使用了很多前缀,那么,它是被允许的,如果它是有效的,你就不应该干扰它的输出。如果您想使用其他可选的序列化数据的方法来实现它,那么您可以自己实现它。我们都知道,PHP库并没有提供最干净的输出,但您选择XML输出是为了保证它可以在另一端被解析,而不是在另一端被大惊小怪。XML不是HTML。委员会从未打算手工制作或人工阅读。这是一台机器对一台机器。你无法通过视觉可靠地解析它。在Firefox或任何XML编辑器中打开以获取树视图,如果您想阅读或编辑它。我们的实现使用了多少可选前缀与我们无关。我在这里非常粗鲁和苛刻,所以请不要生气,但我宁愿为了安全和可维护性而不是漂亮而说话。