Change xml namespace
I have an xml file:
<?xml version="1.0" encoding="utf-8"?>
<ABC version="1" xmlns="urn:Company">
</ABC>
I am releasing version 2, and the namespace has been changed to "NewCompany". How do you update the namespace?
I tried
XmlDocument xmlDocument = new XmlDocument (); using (XmlReader xmlReader = XmlReader.Create ("myfile.xml")) {xmlDocument.Load (XMLReader); }
XmlNodeList nodeList = xmlDocument.GetElementsByTagName("ABC");
if (nodeList.Count == 1)
{
XmlElement element = nodeList.Item(0) as XmlElement;
if (element != null)
{
element.SetAttribute("xmlns", "NewCompany");
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create("myfile.xml", settings))
{
xmlDocument.WriteTo(writer);
}
}
}
But I get the "Prefix" cannot be redefined with the same tag of the launch item. "Exception
I ran into this today and found a workaround. If you use XmlTextWriter instead of XmlWriter, the problem goes away. An example of your code would look something like this:
XmlNodeList nodeList = xmlDocument.GetElementsByTagName("ABC");
if (nodeList.Count == 1)
{
XmlElement element = nodeList.Item(0) as XmlElement;
if (element != null)
{
element.SetAttribute("xmlns", "NewCompany");
using (XmlTextWriter writer = new XmlTextWriter("myfile.xml", Encoding.UTF8))
{
writer.Formatting = Formatting.Indented;
xmlDocument.WriteTo(writer);
}
}
}
, XmlWriter.Create XmlTextWriter, , , . Reflector XmlWriter.Create, , , XmlTextWriter.
XmlTextWriter, , , , XmlWriter.Create, .
, , , , -.