C#中有两个属性的Xml

时间:2012-01-21 17:09:24

标签: c# .net xml

我想制作像这样的xml元素:

<ElementName Type="FirstAttribute" Name="SecondAttribute">Value</Atrybut>

现在我这样做了:

XmlNode xmlAtrybutNode = xmlDoc.CreateElement("ElementName ");

_xmlAttr = xmlDoc.CreateAttribute("Type");
_xmlAttr.Value = "FirstAttribute";
xmlAtrybutNode.Attributes.Append(_xmlAttr);

_xmlAttr = xmlDoc.CreateAttribute("Name");
_xmlAttr.Value = "SecondAttribute";
xmlAtrybutNode.Attributes.Append(_xmlAttr);


xmlAtrybutNode.InnerText = !string.IsNullOrEmpty(Value) 
    ? SetTextLength(Name, ValueLength) 
    : string.Empty;

值是方法中的输入变量。 是否有可能以另一种方式做到这一点? 更有效率? 我可以使用xmlWriter吗?现在我正在使用xmlDocument。

4 个答案:

答案 0 :(得分:6)

您可以将Linq用于XML。

基本上

        XDocument doc = new XDocument();
        doc.Add(
            new XElement("ElementName", "Value",
                new XAttribute("Type", "FirstAttribute"),
                new XAttribute("Name", "SecondAttribute")));

将提供此xml文档

<ElementName Type="FirstAttribute" Name="SecondAttribute">Value</ElementName>

答案 1 :(得分:4)

如何调整现有代码:

XmlElement el = xmlDoc.CreateElement("ElementName");
el.SetAttribute("Type", "FirstAttribute");
el.SetAttribute("Name", "SecondAttribute");
el.InnerText = ...;

其他想法:

  • 的XElement
  • XmlSerializer(来自类实例)

答案 2 :(得分:4)

如果您使用的是.NET 3.5(或更高版本),则可以使用LINQ to XML。确保引用了System.Xml.Linq程序集,并且为其同名命名空间指定了using指令。

XDocument document = new XDocument(
    new XElement("ElementName",
        new XAttribute("Type", "FirstAttribute"),
        new XAttribute("Name", "SecondAttribute"),
        value));

如果您随后想要将XDocument写入目标,则可以使用其Save方法。对于调试,调用其ToString方法很有用,该方法将其XML表示形式返回为string

修改:回复评论:

如果您需要将上面创建的XDocument转换为XmlDocument实例,您可以使用类似于以下内容的代码:

XmlDocument xmlDocument = new XmlDocument();
using (XmlReader xmlReader = document.CreateReader())
    xmlDocument.Load(xmlReader);

答案 3 :(得分:3)

如何使用LINQ to XML,如此article。这可以非常优雅 - 它可以在一条线上完成。

 XDocument doc = new XDocument(
      new XDeclaration("1.0", "utf-8", "yes"),
      new XElement("element",
            new XAttribute("attribute1", "val1"),
            new XAttribute("attribute2", "val2"),
       )
);