更改xml命名空间

时间:2009-11-25 18:12:00

标签: namespaces

我有一个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元素标记内重新定义前缀''。” 例外

1 个答案:

答案 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返回的编写器则不支持。

我意识到这个问题已经有四年了,但也许我的回答会对某人有所帮助。