繁体   English   中英

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

[英]Creating a specific XML document using namespaces in C#

我们得到了一个示例文档,我们需要能够准确地为供应商重现文档的结构。 但是,我对 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)。

你应该这样试试

  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;

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

尝试这样的事情:

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

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

Scott Hanselman一篇包含详细信息的博客文章

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM