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

时间:2016-12-08 16:30:13

标签: c# xml namespaces xml-namespaces

我有代码:

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上,它取消了&#34; xsi:&#34;而且我不知道为什么。有帮助吗?

2 个答案:

答案 0 :(得分:1)

更改xsiAttribute以包含Schema名称空间。

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

答案 1 :(得分:-2)

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

如果有工作,请告诉我

欢呼声

相关问题