更改子节点的命名空间 SimpleXMLElement

问题描述 投票:0回答:1

<ret2:formFields xsi:type="ret1:FormFieldsType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

我想知道如何才能做到以下几点?通过设置子代的名字空间,改变子代的名字空间。xsi:type 属性。

我的代码。

$ret2FormFields = $ret2FileBody->addChild('ret2:formFields', null, 'http://www.w3.org/2001/XMLSchema-instance');
    $ret2FormFields->addAttribute("xsi:type", "ret1:FormFieldsType", 'http://www.w3.org/2001/XMLSchema-instance');

        $ret2FormFields->addChild('ret1:isReverseReplace', false);
        $ret2FormFields->addChild('ret1:payDayDate', '2018-04-10'); /** @todo date will be dynamic */

预期的XML。

<ret2:formFields xsi:type="ret1:FormFieldsType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ret1:isReverseReplace>false</ret1:isReverseReplace>
    <ret1:payDayDate>2018-04-10</ret1:payDayDate>
</ret2:formFields>

我的不正确的XML。

<ret2:formFields xmlns:ret2="http://www.w3.org/2001/XMLSchema-instance" ret2:type="ret1:FormFieldsType">
    <ret1:isReverseReplace>false</ret1:isReverseReplace>
    <ret1:payDayDate>2018-04-10</ret1:payDayDate>
</ret2:formFields>

我被卡住了,如何改变子代的命名空间?ret1 而不改变父名空间 ret2

php xml simplexml
1个回答
0
投票

你把错误的命名空间传给了 addChild 这里,这告诉SimpleXML你希望元素有前缀。

addChild('ret2:formFields', null, 'http://www.w3.org/2001/XMLSchema-instance');

这将告诉SimpleXML,你希望元素有前缀 ret2 和命名空间URI http://www.w3.org/2001/XMLSchema-instance,所以它会生成。

<ret2:formFields xmlns:ret2="http://www.w3.org/2001/XMLSchema-instance">

在你的例子中,你没有显示出前缀是什么。ret2 在文件的其他地方已经分配了,但这是你需要提供的,例如。

addChild('ret2:formFields', null, 'http://example.org/mynamespaces/ret2');
© www.soinside.com 2019 - 2024. All rights reserved.