为什么 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
我有代码:
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