Неполный атрибут XML - PullRequest
       9

Неполный атрибут XML

2 голосов
/ 03 декабря 2009

Я создаю XML из набора данных методом dataset.GetXML (). Я хочу добавить атрибуты к нему

            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);

Но когда я открыл файл XML, я обнаружил, что «xsi:» не было в атрибуте для schemaLocation

           <root xmlns="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:xsi="http://www.createattribute.com"     
           schemaLocation="http://www.createattribute.com/schema.xsd">

Я хочу атрибут как

           xsi:schemaLocation="http://www.createattribute.com/schema.xsd"

Это всегда так, или я что-то здесь упускаю. Мне любопытно, может ли кто-нибудь помочь мне, если это можно решить, или дать мне какой-нибудь URL, когда я смогу найти решение для этого

Спасибо

Ответы [ 2 ]

5 голосов
/ 03 декабря 2009

Ключевым моментом здесь является то, что вам нужно сообщить XmlWriter, какие пространства имен использовать, и оттуда он будет применять правильные префиксы.

В приведенном ниже коде вторым параметром в методе SetAttribute является пространство имен uri, указанное для пространства имен xmlns: xsi. Это позволяет 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");

Аналогичный код с использованием синтаксиса из исходного вопроса:

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); 
0 голосов
/ 03 декабря 2009

Вам необходимо указывать префикс отдельно, а не как часть имени. Не существует перегрузки, которая принимает только префикс и имя, поэтому вы должны использовать перегрузку, которая также принимает пространство имен, и использовать null для пространства имен:

attr = xmlObj.CreateAttribute("xsi", "schemaLocation", null);
...