我有一个xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<ABC version="1" xmlns="urn:Company">
</ABC>
我正在发布版本2,并且命名空间已更改为“NewCompany”。 你如何更新命名空间?
我试过
XmlDocument xmlDocument = new XmlDocument(); 使用(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);
}
}
}
但我明白了 “无法在同一个start元素标记内重新定义前缀''。” 例外
答案 0 :(得分:0)
我今天遇到了这个并找到了解决方法。如果您使用XmlTextWriter而不是XmlWriter,则问题就会消失。您的代码示例如下所示:
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返回具体类型 different 。
XmlTextWriter似乎支持更改文档元素的命名空间,而XmlWriter.Create返回的编写器则不支持。
我意识到这个问题已经有四年了,但也许我的回答会对某人有所帮助。