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