【问题标题】:change xml namespace更改 xml 命名空间
【发布时间】:2009-11-25 18:11:59
【问题描述】:

我有一个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);
                }
            }
        }

但我明白了 “前缀 '' 不能在同一个起始元素标记中从 to 重新定义。” 异常

【问题讨论】:

    标签: namespaces


    【解决方案1】:

    我今天遇到了这个问题并找到了解决方法。如果您使用 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 不同的具体类型不同

    XmlTextWriter 似乎支持更改文档元素的命名空间,而 XmlWriter.Create 返回的编写器不支持。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      相关资源
      最近更新 更多