我使用 XML 绑定向导创建了 TXMLDocument 的后代。此类生成的文件将在根节点中声明名称空间,并为文档的其余部分创建简单的、未经修饰的节点。
<?xml version="1.0"?>
<RootNode xmlns="URL" xmlns:xsi="URL" xsi:schemaLocation="URL">
<SomeNode>
<AnotherNode>Value</AnotherNode>
</SomeNode>
</RootNode>
我在阅读或验证这一点时没有遇到任何问题。但是,发送这些文件的处理器现在要求每个节点都具有命名空间前缀,以便正确处理文件。
<?xml version="1.0"?>
<NS:RootNode xmlns:NS="URL" xmlns:xsi="URL" xsi:schemaLocation="URL">
<NS:SomeNode>
<NS:AnotherNode>Value</NS:AnotherNode>
</NS:SomeNode>
</NS:RootNode>
如何使用我的 TXMLDocument 后代实现此目的?我希望它不会涉及手动编辑 10000 行生成的代码。
好吧,解决方案花了很长时间才发现,但出奇的简单。
XML 数据绑定向导生成的代码将使用默认命名空间创建 xml。您可以通过检查来看到这一点Get
, Load
and New
生成单元中的函数。三个人都打电话给GetDocBinding
,传入TargetNamespace
作为最终参数。TargetNamespace
是一个全局常量字符串,其中包含从您提供给绑定向导的架构或 xml 文档中提取的 URI。
Because TargetNamespace
被分配给根元素作为默认命名空间,子元素不会有前缀。
这样做的方法:
FDocumentName :=
NewXMLDocument.GetDocBinding(
'ns:DocumentName', // <-- Just add the prefix to the root node.
TXMLDocumentName,
TargetNamespace) as IXMLDocumentName;
现在根节点将如下所示:
<ns:DocumentName xmlns:ns="URI">
并且所有子节点在创建时都会有前缀。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)