如何在 XmlDocument 中的所有 XmlElements 中强制使用前缀? [复制]

Posted

技术标签:

【中文标题】如何在 XmlDocument 中的所有 XmlElements 中强制使用前缀? [复制]【英文标题】:How to force prefix in all XmlElements in XmlDocument? [duplicate] 【发布时间】:2020-11-10 14:49:13 【问题描述】:

我需要创建如下所示的 XML。因为目标系统的延迟。我需要在所有节点前面都有前缀。所有节点都需要有“ns0”前缀。

<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:ns0="http://top-secret">
    <ns0:MainMessage>
        <ns0:Date>1</ns0:Date>
        <ns0:Field1>2</ns0:Field1>
        <ns0:Field2>3</ns0:Field2>
    </ns0:MainMessage>
</ns0:RootElement>

没有架构。我需要根据用户输入添加节点。这是将节点添加到“ns0:MainMessage”元素的代码示例:

XmlDocument xml = new XmlDocument();
xml.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?><ns0:RootElement xmlns:ns0=\"http://top-secret\"><ns0:MainMessage></ns0:MainMessage></ns0:RootElement>");
XmlElement mainMessageElement = xml.DocumentElement["ns0:MainMessage"];
XmlElement newElement = mainMessageElement.OwnerDocument.CreateElement("Date");
newElement.Prefix = "ns0";
newElement.InnerText = "thisIsTest;
mainMessageElement.AppendChild(newElement);

这会产生如下输出:

<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:ns0="http://top-secret">
    <ns0:MainMessage>
        <Date>thisIsTest</Date>
    </ns0:MainMessage>
</ns0:RootElement>

虽然我需要“日期”元素以“ns0”为前缀的输出,例如“ns0:Date”。像这样:

<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:ns0="http://top-secret">
    <ns0:MainMessage>
        <ns0:Date>thisIsTest</ns0:Date>
    </ns0:MainMessage>
</ns0:RootElement>

如何强制此 Date 元素具有 ns0 前缀?

【问题讨论】:

【参考方案1】:

您需要将元素实际限定为正确的命名空间:

var newElement = mainMessageElement.OwnerDocument.CreateElement(
    "Date", "http://top-secret");
newElement.Prefix = "ns0";

但是请注意,使用XDocument API 可能更容易完成所有这些操作。

【讨论】:

以上是关于如何在 XmlDocument 中的所有 XmlElements 中强制使用前缀? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有效地使用 XmlDocument.Save()

如何在 XmlDocument 中插入/替换 XML 标签?

如何在c#中关闭xmldocument

c# xmldocument 获取特定节点之后的所有兄弟节点

C#将多个XMLNode或XMLNodeList从一个XMLDocument复制到另一个XMLDocument

如何在 .NET 中使用 XmlWriter 创建 XmlDocument?