php - 更改子节点 SimpleXMLElement 的命名空间
问题描述
<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
此处:
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');
推荐阅读
- html - 我有选择框,如何在选择框的项目上添加徽标?
- python - 删除 matplotlib seaborn 点图中的垂直线
- javascript - 将 typescript 项目与托管在本地 Apache 服务器上的现有 PHP 应用程序集成和调试
- ansible - 为剧本设置 Ansible 环境
- arrays - 出现错误“无法将'listItem'类型的值转换为预期的参数类型'String?'”
- python - ModuleNotFoundError:没有名为“pyarrow._dataset”的模块
- sorting - 根据Google Sheets中选择主题的组合查询数据
- python - 如何让 svgwrite.drawing() 对象在每次迭代时重新初始化?
- r - R命令multcompBoxplot并排有两个图
- java - Gradle JVM 版本与使用的 JDK 版本不匹配