为什么 C# 在构建此 XmlDocument 时删除我的第二个 xml 命名空间属性?

Why does C# remove my second xml namespace attribute when building this XmlDocument?

我有代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace XmlNameSpacingTesting
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument output = new XmlDocument();
            XmlNode baseNode = output.CreateElement("idat");
            XmlAttribute xmlnsAttribute = output.CreateAttribute("xmlns:xsi");
            xmlnsAttribute.Value = "http://www.w3.org/2001/XMLSchema-instance";
            baseNode.Attributes.Append(xmlnsAttribute);
            XmlAttribute xsiAttribute = output.CreateAttribute("xsi:noNamespaceSchemaLocation");
            xsiAttribute.Value = "C:\sub.xsd";
            baseNode.Attributes.Append(xsiAttribute);
            output.AppendChild(baseNode);
            // DumbSubNode
            XmlNode firstNode = output.CreateElement("Sub-Node1");
            firstNode.InnerText = "Single Sub-Node";
            baseNode.AppendChild(firstNode);
            output.Save("Test.xml");
        }
    }
}

我希望输出:

<idat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\sub.xsd">
  <Sub-Node1>Single Sub-Node</Sub-Node1>
</idat>

但我得到的输出是:

<idat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="C:\sub.xsd">
  <Sub-Node1>Single Sub-Node</Sub-Node1>
</idat>

在 XmlAttribute xsiAttribute 上,它带走了 "xsi:",我不知道为什么。有什么帮助吗?

快速扫描阅读试试这个 XmlAttribute xsiAttribute = output.CreateAttribute("xsi:" + "noNamespaceSchemaLocation");

如果有用请告诉我

干杯芽

更改您的 xsiAttribute 以包含架构命名空间。

XmlAttribute xsiAttribute = output.CreateAttribute("xsi:noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
xsiAttribute.Value = "C:\sub.xsd";

这将产生正确的 XML:

<idat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\sub.xsd">
   <Sub-Node1>Single Sub-Node</Sub-Node1>
</idat>

xsi 前缀属性在 Namesapce http://www.w3.org/2001/XMLSchema-instance 中定义。如果您不指定 URI 命名空间,那么它将被视为 xsi 的未识别属性,因此 xsi 被删除。 有关详细信息,请参阅 https://www.w3.org/TR/xmlschema-1/#xsi.noNamespaceSchemaLocation