【问题标题】:How add empty namespace to simpleXML element如何将空命名空间添加到 simpleXML 元素
【发布时间】:2013-01-18 20:54:56
【问题描述】:

为了在本地 php 测试环境版本的 web 服务中模拟从 SOAP web 服务检索的 XML,我希望向元素添加一个空命名空间,就像实际 web 服务本身提供的一样。

但是当我向 addChild 方法添加一个空字符串命名空间参数时,它并没有被添加。任何其他值都会给我一个命名空间,但正如我所说,我希望有一个空的。

所以

$xml = new SimpleXMLElement('<cdhead/>');
$nako = $xml -> addChild ('nako', '000', '');

给我

<cdhead>
    <nako>000</nako>
</cdhead>

但我希望拥有

<cdhead>
    <nako xmlns="">000</nako>
</cdhead>

我怎样才能做到这一点?

【问题讨论】:

  • 为什么要在文档中间有一个空的命名空间?这对我来说听起来很奇怪
  • @hek2mgl 因为我的供应商也这样做,我希望在我的测试环境中模仿它。
  • 你的 php 版本是多少?我试过你的例子,它给了我你所期望的。
  • @hek2mgl 正如我所说,然后我得到0000。当我使用 ' ' 作为命名空间时,我得到 0000。唯一不起作用的是空字符串:-(

标签: php simplexml xml-namespaces


【解决方案1】:

这个问题是因为你使用的是 php 5.2。它是一个错误,已在 PHP 5.2 系列中修复。在这里您可以查看Bugreport。我已经使用 PHP 5.3 进行了测试,您的示例开箱即用。这在任何情况下都应该有效:

<?php

$xml = new SimpleXMLElement('<cdhead/>');
$nako = $xml -> addChild ('nako', '000');
$nako->addAttribute('xmlns', '');

echo $nako->saveXml();

如果 PHP 版本低于 5.3 则手动添加属性

更新我也用 PHP 5.2.17-dotdeb 试过了,结果都是开箱即用的

  • 添加属性
  • addChild 以空字符串作为命名空间

【讨论】:

  • 不错的尝试,但效果不佳:当我添加该语句时,nako 元素不再存在。此外,当我只添加一个普通的 addAttribute 时,也会发生同样的情况。我现在意识到我已经提到我已经尝试过 addAttribute xmlns - 没有效果。
  • 很难说。我已经使用 PHP 5.3 测试了我的示例(当然没有 if ( PHP_VERSION )) $nako->addAttribute('xmlns', '') 工作
  • 事实证明是我的应用程序切断了空的命名空间。当我在浏览器中打开 php 并查看源代码时,我会看到 xml 加上空的 NS。实际上,使用上面的代码,它两次给出了 xmlns 值,这显然被我的应用程序拒绝为无效。
  • 我已经解决了这个问题。 “当我在浏览器中打开时,我可以看到它”的努力工作......:|
猜你喜欢
  • 1970-01-01
  • 2019-11-17
  • 2017-11-27
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
相关资源
最近更新 更多