使用C#中的命名空间创建特定的XML文档

时间:2009-01-14 14:56:55

标签: c# xml namespaces xsd

我们获得了一份示例文档,并且需要能够为供应商准确地再现文档的结构。但是,我对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元素?如果我通过将它们包含在LoadXml()中来开始使用Doc1元素中的命名空间和模式,那么子元素的所有都有它们的命名空间 - 这是禁忌。该文件被拒绝。

换句话说,我必须如图所示完全生产它。 (而且我不只是在C#中编写文本到文件,并希望它是有效的XML)。

4 个答案:

答案 0 :(得分:24)

你应该这样试试

  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 :(得分:4)

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

尝试这样的事情:

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

答案 2 :(得分:0)

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

Scott Hanselmanblog post详细信息。

我认为这是从样本XML文档转到创建它的C#代码的最快捷方式。

答案 3 :(得分:0)

我发现 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");