我们获得了一份示例文档,并且需要能够为供应商准确地再现文档的结构。但是,我对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元素?如果我通过将它们包含在LoadXml()中来开始使用Doc1元素中的命名空间和模式,那么子元素的所有都有它们的命名空间 - 这是禁忌。该文件被拒绝。
换句话说,我必须如图所示完全生产它。 (而且我不只是在C#中编写文本到文件,并希望它是有效的XML)。
答案 0 :(得分:24)
你应该这样试试
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;
答案 1 :(得分:4)
我个人更喜欢使用通用的XmlElement及其属性来声明命名空间。我知道有更好的方法,但这个方法永远不会失败。
尝试这样的事情:
xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1");
答案 2 :(得分:0)
如果您在Samples文件夹中使用Visual Studio 2008,您将找到一个示例插件,您可以将XML片段粘贴为Linq2XML代码。
Scott Hanselman有blog post详细信息。
我认为这是从样本XML文档转到创建它的C#代码的最快捷方式。
答案 3 :(得分:0)
我发现 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");