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

问题描述:

我们给出了一个示例文档,并且需要能够准确地为供应商复制文档的结构。但是,我对C#如何处理命名空间感到有点遗憾。下面是该文件的一个样本:使用C#中的命名空间创建特定的XML文档

<?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)。

你应该尝试这种方式

XmlDocument doc = new XmlDocument(); 

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

    doc.Schemas.Add(schema); 

不要忘了,包括下面的命名空间:如果您在使用Visual Studio 2008的样品

using System.Xml.Schema; 
using System.Xml; 
+2

+1指定using语句,这样的代码段的实际工作! – 2013-11-11 09:54:27

文件夹,你会发现一个样本插件,让你粘贴一个XML片段作为Linq2XML代码。

Scott Hanselman有一个blog post的细节。

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

+0

这里还没有.Net 3.0+。还是2.0。 – 2009-01-14 15:55:46

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

尝试这样:

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

什么是xRootElement? – Shrivallabh 2015-04-07 07:10:16