不完整的XML属性

Jas*_*n M 2 c# xml xml-serialization c#-3.0

我是通过dataset.GetXML()方法从Dataset创建XML.我想为它添加属性

            XmlAttribute attr = xmlObj.CreateAttribute("xmlns:xsi");
            attr.Value = "http://www.createattribute.com";
            xmlObj.DocumentElement.Attributes.Append(attr);

            attr = xmlObj.CreateAttribute("xsi:schemaLocation");
            attr.Value = "http://www.createattribute.com/schema.xsd";
            xmlObj.DocumentElement.Attributes.Append(attr);

            xmlObj.DocumentElement.Attributes.Append(attr);
Run Code Online (Sandbox Code Playgroud)

但是当我打开XML文件时,我发现schemaLocation的属性中没有"xsi:"

           <root xmlns="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:xsi="http://www.createattribute.com"     
           schemaLocation="http://www.createattribute.com/schema.xsd">
Run Code Online (Sandbox Code Playgroud)

我希望属性像

           xsi:schemaLocation="http://www.createattribute.com/schema.xsd"
Run Code Online (Sandbox Code Playgroud)

这总是这样,或者我在这里遗漏了一些东西.我很好奇是否有人可以帮助我,如果可以解决这个问题,或者当我找到解决方案时给我一些URL

谢谢

Dav*_*all 5

这里的关键是你需要告诉XmlWriter使用哪些命名空间,从那里它将应用正确的前缀.

在下面的代码中,SetAttribute方法中的第二个参数是为xmlns:xsi名称空间指定的名称空间uri.这使得XmlWrite放入正确的前缀.

XmlDocument xmlObj = new XmlDocument();
xmlObj.LoadXml("<root></root>");

XmlElement e = xmlObj.DocumentElement;
e.SetAttribute("xmlns:xsi", "http://www.createattribute.com");
e.SetAttribute("schemaLocation", "http://www.createattribute.com", "http://www.createattribute.com/schema.xsd");
Run Code Online (Sandbox Code Playgroud)

使用原始问题的语法的类似代码是:

XmlDocument xmlObj = new XmlDocument();
xmlObj.LoadXml("<root></root>");

XmlAttribute attr = xmlObj.CreateAttribute("xmlns:xsi");            
attr.Value = "http://www.createattribute.com"; 
xmlObj.DocumentElement.Attributes.Append(attr);

attr = xmlObj.CreateAttribute("schemaLocation", "http://www.createattribute.com"); 
attr.Value = "http://www.createattribute.com/schema.xsd"; 
xmlObj.DocumentElement.Attributes.Append(attr); 
Run Code Online (Sandbox Code Playgroud)