代码之家  ›  专栏  ›  技术社区  ›  Vicky

如何使用C.NET中的xmldocument向XML添加属性cf 3.5

  •  13
  • Vicky  · 技术社区  · 14 年前

    我需要为元素“aaa”创建一个前缀为“xx”的属性“abc”。下面的代码添加了前缀,但它也将namespaceuri添加到元素中。

    所需输出:

    <mybody>
    <aaa xx:abc="ddd"/>
    <mybody/>
    

    我的代码:

      XmlNode node = doc.SelectSingleNode("//mybody");
      XmlElement ele = doc.CreateElement("aaa");
    
      XmlAttribute newAttribute = doc.CreateAttribute("xx","abc",namespace);              
      newAttribute.Value = "ddd";
    
      ele.Attributes.Append(newAttribute);
    
      node.InsertBefore(ele, node.LastChild);
    

    上述代码生成:

    <mybody>
    <aaa xx:abc="ddd" xmlns:xx="http://www.w3.org/1999/XSL/Transform"/>
    <mybody/>
    

    所需输出为

    <我的身体
    <aaa-xx:abc=“ddd”/>
    我的身体/体重;
    

    “xx”属性的声明应该在根节点中完成,比如:

    <ns:somexml xx:xsi="http://www.w3.org/1999/XSL/Transform"  xmlns:ns="http://x.y.z.com/Protocol/v1.0">
    

    如果以deisred格式获取输出,怎么办?如果XML不是此所需格式,则无法再处理它。

    有人能帮忙吗?

    谢谢, 维姬

    1 回复  |  直到 11 年前
        1
  •  35
  •   Jon Skeet    14 年前

    我相信这只是直接在根节点上设置相关属性的问题。下面是一个示例程序:

    using System;
    using System.Globalization;
    using System.Xml;
    
    class Test
    {
        static void Main()
        {
            XmlDocument doc = new XmlDocument();
            XmlElement root = doc.CreateElement("root");
    
            string ns = "http://sample/namespace";
            XmlAttribute nsAttribute = doc.CreateAttribute("xmlns", "xx",
                "http://www.w3.org/2000/xmlns/");
            nsAttribute.Value = ns;
            root.Attributes.Append(nsAttribute);
    
            doc.AppendChild(root);
            XmlElement child = doc.CreateElement("child");
            root.AppendChild(child);
            XmlAttribute newAttribute = doc.CreateAttribute("xx","abc", ns);
            newAttribute.Value = "ddd";        
            child.Attributes.Append(newAttribute);
    
            doc.Save(Console.Out);
        }
    }
    

    输出:

    <?xml version="1.0" encoding="ibm850"?>
    <root xmlns:xx="http://sample/namespace">
      <child xx:abc="ddd" />
    </root>