[英]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.