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

How to force prefix in all XmlElements in XmlDocument?

我需要像下面这样创建 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>

虽然我需要输出,其中“Date”元素以“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>

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

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

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

但是请注意,使用 XDocument API.

可能更容易完成所有这些操作