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

Cli*_*rce 11 c# xml xsd namespaces

我们获得了一份示例文档,并且需要能够为供应商准确地再现文档的结构.但是,我对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>
Run Code Online (Sandbox Code Playgroud)

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

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

一旦我开始编写文档,如何将命名空间和模式放入Doc1元素中?如果我通过将它们包含在LoadXml()中来开始使用Doc1元素中的命名空间和模式,那么所有子元素都具有命名空间 - 这就是禁忌.该文件被拒绝.

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

Dim*_*kis 24

你应该这样试试

  XmlDocument doc = new XmlDocument();  

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

  doc.Schemas.Add(schema);
Run Code Online (Sandbox Code Playgroud)

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

using System.Xml.Schema;
using System.Xml;
Run Code Online (Sandbox Code Playgroud)

  • +1用于指定using语句,以便代码片段实际工作! (3认同)

mat*_*eca 5

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

尝试这样的事情:

xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1");
Run Code Online (Sandbox Code Playgroud)