【问题标题】:Creating a specific XML document using namespaces in C#在 C# 中使用命名空间创建特定的 XML 文档
【发布时间】:2010-10-01 09:23:03
【问题描述】:

我们获得了一个示例文档,并且需要能够准确地为供应商重现文档的结构。但是,我对 C# 如何处理命名空间有点迷茫。以下是文档示例:

<?xml version="1.0" encoding="UTF-8"?>
<Doc1 xmlns="http://www.sample.com/file" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.sample.com/file/long/path.xsd">
    <header>
        <stuff>data</stuff>
        <morestuff>data</morestuff>
    </header>
 </Doc1>

我通常会加载一个空白文档,然后开始填充它:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<Doc1></Doc1>");
// Add nodes here with insert, etc...

一旦开始创建文档,如何将命名空间和架构放入 Doc1 元素中?如果我从 Doc1 元素中的命名空间和模式开始,将它们包含在 LoadXml() 中,那么 所有 子元素上都有命名空间——这是一个禁忌。文档被拒绝。

因此,换句话说,我必须完全按照所示制作它。 (而且我宁愿不只是在 C# 中编写文本到文件并希望它是有效的 XML)。

【问题讨论】:

    标签: c# xml namespaces xsd


    【解决方案1】:

    你应该这样尝试

      XmlDocument doc = new XmlDocument();  
    
      XmlSchema schema = new XmlSchema();
      schema.Namespaces.Add("xmlns", "http://www.sample.com/file");
    
      doc.Schemas.Add(schema);
    

    不要忘记包含以下命名空间:

    using System.Xml.Schema;
    using System.Xml;
    

    【讨论】:

    • +1 用于指定 using 语句,以便代码的 sn-p 实际工作!
    【解决方案2】:

    如果您在 Samples 文件夹中使用 Visual Studio 2008,您将找到一个示例插件,可让您将 XML 片段粘贴为 Linq2XML 代码。

    Scott Hanselman 有一个带有详细信息的blog post

    我认为这是从示例 XML 文档到创建它的 C# 代码的最快方法。

    【讨论】:

    • 这里还没有 .Net 3.0+。还是 2.0。
    【解决方案3】:

    我个人更喜欢使用通用 XmlElement 及其属性来声明命名空间。我知道有更好的方法,但这个永远不会失败。

    试试这样的:

    xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1");
    

    【讨论】:

    • 什么是 xRootElement ??
    • 一个 XmlElement 实例 :)
    【解决方案4】:

    我发现 XDocument API 比旧的 XmlDocument 更有用

            XNamespace g = "http://base.google.com/ns/1.0";
            var doc = XDocument.Parse(templateFeed);
            var channel = doc.Descendants("rss").First();
    
            channel.Add(new XElement("item",
                        new XElement("description", "DDD23"),
                        new XElement(g + "image_link", "http://qqq2")
                     ));
    
            doc.Save("plik");
    

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2016-01-01
      • 2014-03-16
      • 2012-06-23
      相关资源
      最近更新 更多