Cli*_*rce 11 c# xml xsd namespaces
我们获得了一份示例文档,并且需要能够为供应商准确地再现文档的结构.但是,我对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>
Run Code Online (Sandbox Code Playgroud)
我通常会这样做是加载一个空白文档,然后开始填充它:
XmlDocument doc = new XmlDocument();
doc.LoadXml("<Doc1></Doc1>");
// Add nodes here with insert, etc...
Run Code Online (Sandbox Code Playgroud)
一旦我开始编写文档,如何将命名空间和模式放入Doc1元素中?如果我通过将它们包含在LoadXml()中来开始使用Doc1元素中的命名空间和模式,那么所有子元素都具有命名空间 - 这就是禁忌.该文件被拒绝.
换句话说,我必须如图所示完全生产它.(而且我宁愿不只是在C#中编写文本到文件,并希望它是有效的XML).
Dim*_*kis 24
你应该这样试试
XmlDocument doc = new XmlDocument();
XmlSchema schema = new XmlSchema();
schema.Namespaces.Add("xmlns", "http://www.sample.com/file");
doc.Schemas.Add(schema);
Run Code Online (Sandbox Code Playgroud)
不要忘记包含以下命名空间:
using System.Xml.Schema;
using System.Xml;
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢使用通用的 XmlElement 及其属性来声明命名空间。我知道有更好的方法,但这个方法永远不会失败。
尝试这样的事情:
xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1");
Run Code Online (Sandbox Code Playgroud)