<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
你把错误的命名空间传给了 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');