c# - 将 XElement 添加到具有相同命名空间的 XDocument
问题描述
我有一个具有以下结构的 XDocument,我想在其中添加一堆 XElement。
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<GrpHdr>
...
</GrpHdr>
<!-- loaded nodes go here -->
<CstmrCdtTrfInitn>
</Document>
XElement 具有以下结构:
<PmtInf xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
...
</PmtInf>
问题是接收方不支持子节点中的命名空间,因为它与 XDocument 的命名空间相同 - 它是多余的。如何避免/删除子节点上的命名空间?
我现在使用的代码:
var childNodes = new XElement(NameSpace + "GrpHdr", ...);
XElement[] loadedNodes = ...;//Loads from a service using XElement.Load
var content = new XElement(NameSpace + "CstmrCdtTrfInitn", childNodes,loadedNodes));
解决方案
当调用orSave
时,有一个标志枚举允许您在一定程度上控制文档如何写入 XML。XElement
XDocument
SaveOptions
实现您想要的最简单的方法(无需遍历结构以删除冗余属性)是使用以下标志之一:OmitDuplicateNamespaces
.
序列化时删除重复的命名空间声明。
您可以在此小提琴中看到,添加此标志会更改我的示例输出:
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<GrpHdr />
<PmtInf xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">...</PmtInf>
</CstmrCdtTrfInitn>
</Document>
对此:
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<GrpHdr />
<PmtInf>...</PmtInf>
</CstmrCdtTrfInitn>
</Document>
推荐阅读
- python - 如何优化凸包绘制?
- f# - 我期待一个函数返回布尔值,但是“这个表达式应该有类型'int * int * string'但这里有类型'string'”
- azure-active-directory - 如何使用用户委派给应用程序的“offline_access”权限?
- css - 带有浮动输入标签的material-ui-chip-input
- python - 如何根据某些条件替换除第一列值之外的所有列值
- javascript - 如何在节点中导出 JS 模块
- python - 无法检查列表的长度,我想检查大于 0 的列表长度而不是遍历它并渲染每个元素
- mapbox - Mapbox GL-JS:为什么我在正常工作时会出现图像加载错误?
- r - 将特定文件夹移动到 R 中的新文件夹➡
- mongodb - 为什么 mongodump 执行 COLLSCAN?