gpt4 book ai didi

php - 使用 SimpleXMLElement 时添加命名空间

转载 作者:IT王子 更新时间:2023-10-29 00:20:32 25 4
gpt4 key购买 nike

这就是我想要的

<!-- language: lang-xml -->
<ws:Test>
<ws:somename2>somevalue2</ws:somename2>
<ws:make>
<ws:model>foo</ws:model>
<ws:model>bar</ws:model>
</ws:make>
</ws:Test>

这是我当前的代码

<!-- language: lang-php -->
$xmlTest = new SimpleXMLElement('<Test/>', 0, false, 'ws', true);
$xmlTest->addChild("ws:somename2", "somevalue2", 'http://microsoft.com/wsdl/types/');
$make = $xmlTest->addChild('ws:make', null, 'ws');
#$make->addAttribute('name','Ford');
$make->addChild('ws:model', 'foo', 'ws');
$make->addChild('ws:model', 'bar', 'ws');
header ("Content-Type:text/xml");
print_r($xmlTest->asXML());

但它输出

<!-- language: lang-xml -->
<Test>
<ws:somename2>somevalue2</ws:somename2>
<ws:make>
<ws:model>foo</ws:model>
<ws:model>bar</ws:model>
</ws:make>
</Test>

如您所见,测试中缺少 ws:

最佳答案

SimpleXML 有一个不寻常的怪癖,其中命名空间前缀是从根元素中过滤的。我不确定为什么会这样。

但是,我使用的一个变通方法基本上是在前缀上加前缀,这样解析器就只删除第一个,而留下第二个

$xmlTest = new SimpleXMLElement('<xmlns:ws:Test></xmlns:ws:Test>', LIBXML_NOERROR, false, 'ws', true);
$xmlTest->addAttribute('xmlns:xmlns:ws', 'http://url.to.namespace');
$xmlTest->addAttribute('xmlns:xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');

这似乎对我有用,但我很想知道为什么 SimpleXML 会这样做。

关于php - 使用 SimpleXMLElement 时添加命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6927567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com