Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Incomplete XML attribute

I am creating XML out of Dataset by dataset.GetXML() method. I want to add attributes to it

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

But when I open the XML file, I found "xsi:" was not there in the attribute for schemaLocation

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

I want the attribute like

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

Is this always like this, or i m missing something here. I am curious if anyone could help me if this could be resolved or give me some URL when I can find the solution for this

Thanks

like image 344
Jason M Avatar asked Mar 15 '26 19:03

Jason M


1 Answers

The key here is that you need to tell the XmlWriter what namespaces to use and from there it will apply the correct prefixes.

In the code below the second parameter in the SetAttribute method is the namespace uri specified for xmlns:xsi namespace. This lets the XmlWrite put in the right prefix.

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

Similar code using the syntax from your original question is:

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); 
like image 120
David Hall Avatar answered Mar 17 '26 10:03

David Hall



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!