代码之家  ›  专栏  ›  技术社区  ›  Clinton Pierce

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

  •  11
  • Clinton Pierce  · 技术社区  · 16 年前

    我们得到了一个示例文档,并且需要能够为供应商复制文档的结构。但是,我对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语言编写文本到A文件,也希望它是有效的XML)。

    3 回复  |  直到 13 年前
        1
  •  23
  •   Dimi Takis    16 年前

    你应该那样试试

      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;
    
        2
  •  4
  •   mathifonseca Piyush Chaudhari    13 年前

    我个人更喜欢使用公共的xmlElement及其属性来声明名称空间。我知道有更好的方法,但这一个永远不会失败。

    尝试如下操作:

    xRootElement.SetAttribute("xmlns:xsi", "http://example.com/xmlns1");
    
        3
  •  0
  •   Pop Catalin    16 年前

    如果您在sample s文件夹中使用Visual Studio 2008,您将找到一个示例加载项,让您将XML片段粘贴为Linq2XML代码。

    Scott Hanselman 有一个 blog post 详细信息。

    我认为这是从示例XML文档到创建它的C代码最快的方法。