相关疑难解决方法(0)

使用C#中的命名空间创建特定的XML文档

我们获得了一份示例文档,并且需要能够为供应商准确地再现文档的结构.但是,我对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).

c# xml xsd namespaces

11
推荐指数
2
解决办法
5万
查看次数

使用XmlNamespaceManager将命名空间添加到XmlDocument

我正在尝试使用XmlNamespaceManager将命名空间添加到XmlDocument.这是当前的xml:

<?xml version="1.0"?>
<kml>
  <Document>
    <Placemark>
    </Placemark>
  </Document>
</kml>
Run Code Online (Sandbox Code Playgroud)

我希望它转换为这个xml(使用XmlNamespaceManager):

<?xml version="1.0"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
     xmlns:gx="http://www.google.com/kml/ext/2.2" 
     xmlns:kml="http://www.opengis.net/kml/2.2"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Document>
    <Placemark>
    </Placemark>
  </Document>
</kml>
Run Code Online (Sandbox Code Playgroud)

但我无法更改xml.这是代码,我知道它应该是一个简单的修复:

public void addXmlns()
        {

            string xml = @"<?xml version=""1.0""?>
                    <kml>
                    <Document>
                    <Placemark>
                    </Placemark>
                    </Document>
                    </kml>";

            var xmldoc = new XmlDocument();

            xmldoc.LoadXml(xml);

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmldoc.NameTable);

            //Add the namespaces
            nsmgr.AddNamespace("", "http://www.opengis.net/kml/2.2");
            nsmgr.AddNamespace("gx", "http://www.google.com/kml/ext/2.2");
            nsmgr.AddNamespace("kml", "http://www.opengis.net/kml/2.2");
            nsmgr.AddNamespace("atom", "http://www.w3.org/2005/Atom");
            nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");

            string message;
            message = xmldoc.InnerXml;

            MessageBox.Show(message); // still shows the original xml

        }
Run Code Online (Sandbox Code Playgroud)

先谢谢你

更新#1 - 试过这个,但它也不会改变XML: …

c# xml xmldocument xml-namespaces

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

xml ×2

namespaces ×1

xml-namespaces ×1

xmldocument ×1

xsd ×1