gpt4 book ai didi

xml - 如何使用 TXMLDocument 向每个节点添加 namespace 前缀

转载 作者:数据小太阳 更新时间:2023-10-29 02:22:58 28 4
gpt4 key购买 nike

我使用 XML 绑定(bind)向导创建了 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 数据绑定(bind)向导生成的代码将使用默认命名空间创建 xml。您可以通过检查生成单元中的 GetLoadNew 函数来了解这一点。这三个都调用 GetDocBinding,将 TargetNamespace 作为最终参数传递。 TargetNamespace 是一个全局常量字符串,其中包含从您提供给绑定(bind)向导的架构或 xml 文档中提取的 URI。

因为 TargetNamespace 被分配给根元素作为默认命名空间,所以子元素不会有前缀。

实现方式:

FDocumentName := 
NewXMLDocument.GetDocBinding(
'ns:DocumentName', // <-- Just add the prefix to the root node.
TXMLDocumentName,
TargetNamespace) as IXMLDocumentName;

现在根节点看起来像:

<ns:DocumentName xmlns:ns="URI">

并且所有子节点在创建时都会有前缀。

关于xml - 如何使用 TXMLDocument 向每个节点添加 namespace 前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3989012/

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