首页 > 解决方案 > 如何在 XmlDocument 中的所有 XmlElements 中强制使用前缀?

问题描述

我需要像下面这样创建 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:日期”。像这样:

<?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 前缀?

标签: c#.netxmlxmldocumentxmlelement

解决方案


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

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

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


推荐阅读