代码之家  ›  专栏  ›  技术社区  ›  Metro Smurf

如何使用XmlDocument向根元素添加多个名称空间?

  •  17
  • Metro Smurf  · 技术社区  · 17 年前

    XmlDocument

    这是我的密码:

    XmlDocument doc = new XmlDocument();
    XmlElement root = doc.CreateElement("JOBS", "http://www.example.com");
    doc.AppendChild(root);
    
    XmlElement job = doc.CreateElement("JOB", "http://www.example.com");
    root.AppendChild(job);  
    
    XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com");
    job.AppendChild(docInputs);  
    
    XmlElement docInput = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com");
    docInputs.AppendChild(docInput);  
    
    XmlElement docOutput = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com");
    docOutputs.AppendChild(docOutput);  
    

    电流输出:

    <JOBS xmlns="http://www.example.com">
      <JOB>
        <JOB:DOCINPUTS xmlns:JOB="http://www.example.com">
          <JOB:DOCINPUT />
        </JOB:DOCINPUTS>
        <JOB:DOCOUTPUTS xmlns:JOB="http://www.example.com">
          <JOB:DOCOUTPUT />
        </JOB:DOCOUTPUTS>
      </JOB>
    </JOBS>
    

    <JOBS xmlns:JOBS="http://www.example.com" xmlns:JOB="http://www.example.com">
      <JOB>
        <JOB:DOCINPUTS>
          <JOB:DOCINPUT />
        </JOB:DOCINPUTS>
      <JOB:DOCOUTPUTS>
        <JOB:DOCOUTPUT />
      </JOB:DOCOUTPUTS>
      </JOB>
    </JOBS>
    

    我的问题:如何创建一个 是否包含具有多个命名空间的根元素?

    3 回复  |  直到 17 年前
        1
  •  31
  •   Oppositional    17 年前

    以下内容将生成您在上面请求的所需输出:

    XmlDocument doc = new XmlDocument();
    
    XmlElement root = doc.CreateElement("JOBS");
    root.SetAttribute("xmlns:JOBS", "http://www.example.com");
    root.SetAttribute("xmlns:JOB", "http://www.example.com");
    doc.AppendChild(root);
    
    XmlElement job = doc.CreateElement("JOB");
    
    XmlElement docInputs    = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com");
    XmlElement docInput     = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com");
    docInputs.AppendChild(docInput);
    job.AppendChild(docInputs);
    
    XmlElement docOutputs   = doc.CreateElement("JOB", "DOCOUTPUTS", "http://www.example.com");
    XmlElement docOutput    = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com");
    docOutputs.AppendChild(docOutput);
    job.AppendChild(docOutputs);
    
    doc.DocumentElement.AppendChild(job);
    

        2
  •  6
  •   Robert Rossney    17 年前

    可以显式地在元素上创建名称空间前缀属性。然后,当您添加使用相同名称空间和相同前缀创建的子元素时,XmlDocument将发现它不需要向元素添加名称空间声明。

    运行此示例以了解其工作原理:

        using System;
        using System.Xml;
    
        static void Main(string[] args)
        {
            XmlDocument d = new XmlDocument();
            XmlElement e = d.CreateElement("elm");
    
            d.AppendChild(e);
    
            d.DocumentElement.SetAttribute("xmlns:a", "my_namespace");
    
            e = d.CreateElement("a", "bar", "my_namespace");
            d.DocumentElement.AppendChild(e);
            e = d.CreateElement("a", "baz", "other_namespace");
            d.DocumentElement.AppendChild(e);
            e = d.CreateElement("b", "bar", "my_namespace");
            d.DocumentElement.AppendChild(e);
    
            d.Save(Console.Out);
    
            Console.ReadLine();
        }
    
        3
  •  0
  •   Dirk Vollmar    17 年前

            XmlDocument doc = new XmlDocument();
    
            XmlElement root = doc.CreateElement("JOBS", "http://www.example.com");
            root.SetAttribute("xmlns:JOB", "http://www.example.com"); 
    
            doc.AppendChild(root);
    
            XmlElement job = doc.CreateElement("JOB", "http://www.example.com");
            root.AppendChild(job);
    
            XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com");
            job.AppendChild(docInputs);
    
            XmlElement docInput = doc.CreateElement("JOB", "DOCINPUT", "http://www.example.com");
            docInputs.AppendChild(docInput);
    
            XmlElement docOutput = doc.CreateElement("JOB", "DOCOUTPUT", "http://www.example.com");
            root.AppendChild(docOutput);