簡體   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