我有代码:
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;而且我不知道为什么。有帮助吗?
答案 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”);
如果有工作,请告诉我
欢呼声