首页 > 其他分享 >[代码]DOM和LINQ to XML创建XML树的三种方式

[代码]DOM和LINQ to XML创建XML树的三种方式

时间:2023-06-30 19:03:37浏览次数:47  
标签:XML AppendChild DOM XElement LINQ XmlElement new Document


此代码主要示范了DOM和LINQ to XML三种创建XML树的方式。

第01种、使用W3C DOM创建XML树可以使用XmlDocument.CreateElement()方法创建XML元素。
使用XmlElement.InnerText为元素添加内容,比如在元素的开始标记和结束标记之间添加字符串内容。
使用XmlElement.SetAttribute()方法为元素设置属性,如果指定的属性不存在,则会添加此属性。
把元素创建好了,属性也设置妥当了,就可以调用XmlElement.AppendChild()将元素作为元素添加给当前元素,XmlDocument.AppendChild()的方法将元素添加到文档对象中。
然后可以调用XmlDocument.Save()方法保存XML,如本例将其保存到文件中。

示例代码:

// *************************************************
// 使用W3C DOM创建XML树。
// *************************************************
XmlDocument Document = new XmlDocument();

XmlElement Name = Document.CreateElement("Name");
Name.InnerText = "Patrick Hines";

XmlElement HomePhone = Document.CreateElement("Phone");
HomePhone.SetAttribute("Type", "Home");
HomePhone.InnerText = "206-55-0144";

XmlElement WorkPhone = Document.CreateElement("Phone");
WorkPhone.SetAttribute("Type", "Work");
WorkPhone.InnerText = "425-555-0145";

XmlElement Street = Document.CreateElement("Street");
Street.InnerText = "123 Main St";

XmlElement City = Document.CreateElement("City");
City.InnerText = "Mercer Island";

XmlElement State = Document.CreateElement("State");
State.InnerText = "WA";

XmlElement Postal = Document.CreateElement("Postal");
Postal.InnerText = "60842";

XmlElement Address = Document.CreateElement("Address");
Address.AppendChild(Street);
Address.AppendChild(City);
Address.AppendChild(State);
Address.AppendChild(Postal);

XmlElement Contact = Document.CreateElement("Contact");
Contact.AppendChild(Name);
Contact.AppendChild(HomePhone);
Contact.AppendChild(WorkPhone);
Contact.AppendChild(Address);

XmlElement Contacts = Document.CreateElement("Contacts");
Contacts.AppendChild(Contact);

Document.AppendChild(Contacts);

Document.Save(@"C:/LINQ/XmlDocument.xml");


打开XmlDocument.xml文件,内容如下:

<Contacts>
  <Contact>
    <Name>Patrick Hines</Name>
    <Phone Type="Home">206-55-0144</Phone>
    <Phone Type="Work">425-555-0145</Phone>
    <Address>
      <Street>123 Main St</Street>
      <City>Mercer Island</City>
      <State>WA</State>
      <Postal>60842</Postal>
    </Address>
  </Contact>
</Contacts>


第02种、LINQ to XML使用类似于DOM的方式创建XML树
在LINQ to XML中使用的是XDocument来表示XML文档,而不是XmlDocument;使用的XElement来表示元素,而不是XmlElement。
如果想要为元素设置属性可以调用XElement.SetAttributeValue()方法。
另外,创建XElement的时候,可以直接使用其构造函数,同时传递其元素名和元素的内容。
最后可以调用XElement.Add()方法将创建的其他XElement元素作为子元素添加给当前元素,此方法可以同时添加任意多个XElement对象。这要比XmlElement.AppendChild()一次只能添加一个要方便许多。
XDocument.Add()方法则是将元素添加到XML文档中。

示例代码:

XDocument Document = new XDocument();

XElement Contacts = new XElement("Contacts");
XElement Contact = new XElement("Contact");

XElement Name = new XElement("Name", "Patrick Hines");
XElement HomePhone = new XElement("Phone", "206-555-0144");
HomePhone.SetAttributeValue("Type", "Home");
XElement WorkPhone = new XElement("Phone", "425-555-0145");
WorkPhone.SetAttributeValue("Type", "Work");

XElement Address = new XElement("Address");

XElement Street = new XElement("Street", "123 Main St");
XElement City = new XElement("City", "Mercer Island");
XElement State = new XElement("State", "WA");
XElement Postal = new XElement("Postal", "68042");

Address.Add(Street, City, State, Postal); 

Contact.Add(Name, HomePhone, WorkPhone, Address);
Contacts.Add(Contact);
Document.Add(Contacts);

Console.WriteLine(Document.ToString());


输出到控制台的XML如下:

<Contacts>
  <Contact>
    <Name>Patrick Hines</Name>
    <Phone Type="Home">206-555-0144</Phone>
    <Phone Type="Work">425-555-0145</Phone>
    <Address>
      <Street>123 Main St</Street>
      <City>Mercer Island</City>
      <State>WA</State>
      <Postal>68402</Postal>
    </Address>
  </Contact>
</Contacts>


第03种方式、使用函数构造的方式创建XML树
是函数构造,而不是构造函数,这两者是不同的。
函数构造的方式是LINQ to XML提供的一个功能,此功能方便了创建XML树,代码简洁,而且高效。
比如前面所创建的XML树,则可以通过如下的代码来完成:

XElement Contacts = new XElement("Contacts",
    new XElement("Contact",
        new XElement("Name", "Patrick Hines"),
        new XElement("Phone", "206-555-0144",
            new XAttribute("Type", "Home")),
        new XElement("Phone", "425-555-0145",
            new XAttribute("Type", "Work")),
        new XElement("Address",
            new XElement("Street", "123 Main St"),
            new XElement("City", "Mercer Island"),
            new XElement("State", "WA"),
            new XElement("Postal", "68042"))));

Console.WriteLine(Contacts);


你不觉得它要简洁的很多吗!^_^

标签:XML,AppendChild,DOM,XElement,LINQ,XmlElement,new,Document
From: https://blog.51cto.com/u_16173572/6592874

相关文章

  • 光脚丫学LINQ(041):使用对象关系设计器修改映射关系
    演示视频:http://u.115.com/file/f2b86d8eab演示重点此演示视频主要介绍了如何使用VS提供的【对象关系设计器】这个工具来建立实体类之间的关系。虽然此工具可以自动根据数据表之间的关系来建立起对象模型中实体类与实体类之间的关系。然而,默认情况下,它所建立的关系貌似都是清一色的......
  • N层研习记录01:试图通过Boolean参数控制并发冲突的检查方式(LINQ to SQL)
    作者:光脚丫思考版权所有,转载请注明出处!^_^此研习用到的测试代码可通过以下两个地址下载,如果不能下载,请留言通知我。下载地址02:http://u.115.com/file/f26716bcc2如果你只想快速的查看测试代码的主题部分,或者想更具体的了解测试的详细记录,则可以参看另一篇名为《N层研习中的测试代......
  • [代码]使用LINQ的查询结果填充XML树(LINQ to XML)
    此代码使用的是LINQtoXML的函数构造功能创建一个XML树,其中树中的一些元素是通过LINQ查询结果填充。实际上,通过本例也可以看到如何使用LINQtoXML将原始XML文档转换成为另外一种XML文档。下面代码中使用的PurchaseOrder.xml文档内容:<?xmlversion="1.0"?><PurchaseOrderPurchas......
  • [代码]创建XDocument对象(LINQ to XML)
    LINQtoXML中的XDocument是用来表示内存中的XML文档的。同样可以使用函数构造功能来创建此对象。此示例代码主要用来演示如何创建一个通用的XML文档。示例代码代码中创建的XDocument对象,包含了2个注释(XComment),1个处理指令(XProcessingInstrucation),1个根元素及其若干子元素,也为......
  • [代码]如何从文件加载XML(LINQ to XML)
    此示例代码演示如何使用XElement.Load()方法从文件中加载XML。示例代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Xml.Linq;namespaceDemo02Ex01{classProgram{staticvoidMain(string[]arg......
  • [代码]如何分析XML字符串(LINQ to XML)
    此代码演示如何使用XElement.Parse()方法分析XML字符串,并创建XElement元素。从编程效率来讲这种做法可能效率非常的高,但从代码的执行效率来看,还是使用函数构造的方式创建XML树的效率高一点。示例代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSys......
  • [代码]元素的附加和克隆(LINQ to XML)
    当将一个XElement对象添加给一个XML树的时候,如果此XElement对象没有父级,即不是另外一个XML树的一部分,此时将会将此元素直接添加给XML树;如果XElement对象有父级,则会克隆这个XElement对象,然后将克隆的对象添加到新的XML树。示例代码代码中的Child1被添加到XmlTree1元素,因此它已经有了......
  • Spectrum Random Masking for Generalization in Image-based Reinforcement Learning
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! ......
  • CentOs6 yum源 centos/6.4/os/x86_64/repodata/repomd.xml报错的解决方法
    CentoS6停止维护更新日期2020年11月30日CentOS7停止维护更新日期2024年6月30日CentOS8停止维护更新日期2021年12月31日因为测试需要,安装了CentOS6.4,进行更新时yum提示不可用。按照阿里云开源镜像(https://developer.aliyun.com/mirror/centos)......
  • XML PHP SimpleXMLElement Object数组转化为普通数组
    做微信第三方接口接入的时候发现接口返回的数据都是xml格式的。以下是如何把xml格式转化为普通的数组格式取值。xml格式数据:$xmlstr="<xml><mch_appid>".$data['mch_appid']."</mch_appid><mchid>".$data['mchid']."</mchid>......