对于大型XML文档,可以使用XmlReader类来读取它们。因为XmlReader使用Steam(流)读取文件,所以不会消耗太多内存。让我们看看如何使用XmlDocument类。有需要的朋友可以参考一下。
W3C制定了XML DOM标准。许多编程语言都提供了支持W3C XML DOM标准的API。在我的上一篇文章中,我介绍了如何使用Javascript加载和查询XML文档。在本文中,我将介绍。网。它支持并扩展了W3C XML DOM标准。它首先将整个XmlDocument加载到内存中,然后对XML文档进行操作。因此,如果XML文档太大,不建议使用XML document类,因为它会消耗太多内存。对于大型XML文档,可以使用XmlReader类来读取它们。因为XmlReader使用Steam(流)读取文件,所以不会消耗太多内存。让我们看看如何使用XmlDocument类。(一) 加载加载XML常用的方法有三种:public virtual void load(字符串文件名);公共虚拟空负载(流in Stream);public virtual void LoadXml(字符串XML);下面的代码演示了如何使用它们:如下复制代码:XML document XML doc=new XML document();xmlDoc。load(' XML file 1 . XML ');entity retrievedAnnotation=_ org service。Retrieve('annotation ',new Guid(' C1 b 13 c 7 f-F430-E211-8fa 1-984 be 1731399 '),new columns et(true));byte[] fileContent=Convert。from base 64 string(retrievedAnnotation[' document body ']。ToString());memory stream ms=new memory stream(file content);XML document XML doc 2=new XML document();xmlDoc2。负载(毫秒);string str=@ ' Customers customer id=' 01 ' city=' Beijing ' country=' China ' name=' Lenovo '//Customers;XML document XML doc 3=new XML document();xmlDoc3。load XML(str);(二) 查询您可以使用XPath来查询XML元素、属性和文本。具体定义见w3school。您应该首先理解XPath表达式:
表示
形容
节点名
选择此节点的所有子节点。
/
从根节点中选择。
//
从当前节点中选择文档中与选择匹配的节点,而不考虑它们的位置。
选择当前节点。
.
选择当前节点的父节点。
@
选取属性。我们主要使用两个方法来查询可扩展标记语言文档,选择节点(xpath表达式)和选择单个节点(xpath表达式).选择节点返回一个XmlNodeList对象,也就是所有符合xpath表达式的可扩展标记语言节点都将会被返回,你需要对返回的结果进行遍历选择单一节点只返回第一个符合xpath表达式的节点,或者返回零。以下面的可扩展标记语言文件为例,我们进行一些演示:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?客户客户id='01 '城市='北京'国家='中国'姓名='联想'联系人性别='女'头衔='支持'李/联系人客户id='02 '城市='阿姆斯特丹'国家='荷兰'姓名='壳牌'联系人性别='男'头衔='销售人员'亚伦巴比特/联系人联系人联系人性别='女'头衔='销售经理'黛西卡贝尔/联系人联系人联系人性别='男'头衔='销售人员'加布里埃尔Eads/联系人/客户/客户1。返回所有接触节点:XmlNodeList nodelist=xmlDoc .选择节点('/客户/客户/联系人');foreach(节点列表中的XmlNode节点){控制台.WriteLine(节点外部XML);} 输出结果为:联系人性别='女'职衔='支持'李李/联系人联系人性别='男'职衔='销售人员'亚伦巴比特/联系人联系人性别='女'职衔='销售经理'黛西卡贝尔/联系人联系人性别='男'职衔='销售人员'加布里埃尔Eads/联系人2。返回身份证明(识别)为02的客户:XmlNode node=xmlDoc .SelectSingleNode('/Customers/Customer[@ id=' 02 ']');控制台WriteLine(节点外部XML);输出结果为:客户id='02 '城市='阿姆斯特丹'国家='荷兰'姓名='壳牌'联系人性别='男性'头衔='销售人员'亚伦巴比特/联系人联系人性别='女性'头衔='销售经理'黛西卡贝尔/联系人联系人性别='男性'头衔='销售人员'加布里埃尔Eads/联系人/客户3。返回含有接触名为李莉的联系人:XmlNode node=xmlDoc .SelectSingleNode('/Customers/Customer/Contact[text()=' Li Li ']');控制台WriteLine(节点外部XML);输出结果:联系人性别='女'职称='支持'李丽/联系人4。返回含有接触名为李莉的顾客。
注意和3的区别:XmlNode node=xmlDoc .SelectSingleNode('/Customers/Customer[Contact/text()=' Li Li ']');控制台WriteLine(节点外部XML);输出结果:客户id='01 '城市='北京'国家='中国'姓名='联想'联系人性别='女'职称='支持'李莉/联系人/客户5。(1) 获取外部xml: XmlNode node=xmlDoc .SelectSingleNode('/Customers/Customer[@ id=' 02 ']');控制台WriteLine(节点外部XML);(2) 获取内部xml: XmlNode node=xmlDoc .SelectSingleNode('/Customers/Customer[@ id=' 02 ']');控制台WriteLine(节点inner XML);(3) 获取text XmlNode node=xmlDoc .SelectSingleNode('/Customers/Customer/Contact[text()=' Li Li ']');控制台WriteLine(节点InnerText);(4) 获取属性XmlNode node=xmlDoc .SelectSingleNode('/Customers/Customer/Contact[text()=' Li Li ']');控制台WriteLine(节点。属性['性别']。值);(三) 创建以创建以下可扩展标记语言文档为例:复制代码代码如下:可扩展标记语言版本='1.0 '编码='UTF八号'?客户客户id='01 '姓名='联想'国家='中国'城市='北京'联系人头衔='支持'性别='女'李丽/联系人/客户/客户复制代码代码如下:var XML doc=new XML文档();//首先创建可扩展标记语言声明xmlDoc .AppendChild(xmlDoc .CreateXmlDeclaration('1.0 ',' utf-8 ',null));//创建根节点并追加到doc var el=xmlDoc中CreateElement(“客户");xmlDoc .AppendChild(El);//客户联想XML元素元素Customer=XML doc .CreateElement(“客户");XmlAttribute attrID=xmlDoc .创建属性(“id”);属性值=' 01元素客户属性。append(attrID);XmlAttribute cityID=xmlDoc .创建属性(" city ");城市ID .值='北京;元素客户属性。追加(城市id);XmlAttribute attrCountry=xmlDoc .创建属性(“国家”);attrCountry .价值='中国;元素客户属性。附加(attr国家);XmlAttribute nameCountry=xmlDoc .创建属性(“名称”);命名国家. value='联想;元素客户属性。追加(国家名称);埃尔AppendChild(元素客户);//联系李李XML element element Contact=XML doc .CreateElement(' Contact ');元素接触. InnerText=' LiliXmlAttribute attrGender=xmlDoc .创建属性("性别");attrGender .值='女性;元素接触属性。追加(属性性别);XmlAttribute titleGender=xmlDoc .创建属性(“标题”);标题性别. Value='支持元素接触。属性。追加(标题性别);元素客户AppendChild(元素接触);xmlDoc .保存(‘测试。XML’);总结:XML文档类是。Net API中提供的支持W3C XML DOM标准的类。可以用它来创建和查询可扩展标记语言文档。由于XmlDocument要将可扩展标记语言文档的内容全部装载进内存中,所以对于读取内容过大的可扩展标记语言文档,不适合使用XmlDocument类,而可以使用XmlReader来完成读取。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。