手机版

从查询表达式到可扩展置标语言的编程基�

时间:2021-10-24 来源:互联网 编辑:宝哥软件园 浏览:

1.LINQ到XML编程基础1。LINQ到XML类系统。Linq命名空间包含19个类。下表列出了它们的名称和描述:类描述xXAttribute表示一个XML属性XCData表示一个CData文本节点XComment表示一个XML注释XContainer是一个抽象基类XDeclaration,适用于所有可能有子节点的节点Xdeclaration表示一个XML声明XDocument表示一个XML。XDocumentType表示一个XML文档类型定义(dtd)。xelement表示一个XML元素。XName表示XML元素或属性的名称。XNamespace表示XML的命名空间。XNode是一个抽象类。它代表了XML树的节点XNodeDocumentOrderComparer,提供了比较节点文档顺序的功能。XNodeEqualityComparer提供了比较节点值是否相等的函数。抽象基类XObjectXNode和XAttribute XObjectChangeXObject引发事件。类型XObjectChangeEventArgs为“更改”和“已更改”事件提供数据。processing指令表示一条xml处理指令。XText代表一个文本节点。下面的代码演示了如何使用LINQ到XML快速创建一个XML。复制的代码如下: pu。blic static void create document(){ XDocument xdoc=new XDocument(new XDeclaration(' 1.0 ',' utf-8 ',' yes '),new xeelement(' Root ',' Root '));xdoc。保存(路径);}运行此示例将生成一个包含以下内容的xml文件:xml版本='1.0 '编码='utf-8' standalone='yes '?Rootroot/Root可以看到微软在LINQ投入了大量的精力,这让我们在编程的时候感觉很舒服。下面详细描述了处理XML时最常用的三个类:XElement、XAttribute和XDocument。如果你掌握了这些课程,你会觉得使用LINQ到XML很舒服。2.xeelement类xeelement类是LINQ对XML的基本类之一。它表示一个XML元素。您可以使用此类创建元素;更改元素内容;添加、更改或删除子元素;向元素添加属性;或者以文本格式序列化元素内容。它还可以与系统中的其他类进行互操作。Xml,如XmlReader、XmlWriter和XslCompiledTransform。使用LINQ到xml来创建XML文档的方法有很多,应该根据实际需要来使用哪种方法。创建xml文档最简单也是最常见的方法是使用XElement类。下面的代码演示了如何使用XElement类创建xml文档:复制代码如下: public static void create categories(){ Xelement root=new Xelement(' categories ',new XElement('Category ',new XElement('CategoryID ',Guid。NewGuid()),新的XElement('CategoryName ','饮料'),新的XElement('Category ',新的XElement('CategoryID ',Guid。NewGuid()),新的XElement('CategoryName ',' Condiments '),新的XElement('Category ',新的XElement('CategoryID ',Guid。NewGuid())、new xeelement(' CategoryName '、' CategoryName根。保存(路径);}运行此示例将获得一个xml文件,其内容为:复制如下代码。xml版本='1.0 '编码='utf-8 '?类别类别类别57485174-46fc-4e 8c-8d 98-d25b 53d 504 a 1/类别类别名称/类别名称/类别类别类别名称1474 DD 1-8014-48f 7-b093-b 47 ca 5d 5b 770/类别类别类别名称类别名称第二个类别/类别类别类别名称36424 E0-e002-4939-

以下的示例从北风数据库中读取类别、产品表中的数据来创建包含产品类别,以及每个类别下所有产品的可扩展标记语言文件:复制代码代码如下:公共静态void createCategoriesFromDatabaSe(){ 0使用(north winddata context db=new north winddata context()){ xeElement root=new xeElement(' Categories ',db .类别。选择(c=新的元素('类别、新的元素('类别名称c。类别名称')、新的元素('类别名称')、新的元素('产品c。产品。选择(p=新的XElement('产品,新的xeelement(' ProductName,p.ProductName)).取(2))))。取(3));根。保存(路径);} } 运行该示例将会得到一个可扩展标记语言文件,其内容为:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?类别类别类别1/类别名称类别名称类别名称产品产品产品名称类别/产品名称/产品产品产品名称类别昌/产品名称/产品/产品/类别类别类别类别名称类别2/类别名称类别名称类别名称产品产品产品名称产品名称糖浆/产品名称/产品产品产品名称厨师安东的卡津调味料/产品名称/产品/产品/类别类别类别类别类别类别名称类别名称3/类别名称类别名称类别名称产品产品产品产品名称类包含了许多方法,这些方法使得处理可扩展标记语言变得轻而易举。有关这些方法请参照MSDN。其中,保存,创建阅读器,字符串和给某人写信方法是比较常用的三个方法:方法参数返回值描述CreateReader无系统Xml。的成员创建此节点的XmlReaderSaveSystem .Stringvoid将此元素序列化为文件系统。输入输出文本写无效将此元素序列化为文本书写系统.Xml。XmlWritervoid将此元素序列化为XmlWriterSystem .字符串,系统Xml。Linq.SaveOptionsvoid将此元素序列化为文件,并可以选择禁用格式设置系统。文本编写器,系统Xml。Linq.SaveOptionsvoid将此元素序列化为TextWriter,并可以选择禁用格式设置写给系统.Xml。XmlWritervoid将此元素写入XmlWriterToString无系统。线返回此节点的缩进XMLSystem .XML。Linq。保存选项系统。线返回此节点的XML,并可以选择禁用格式设置现在有很多使用的成员作为数据源的应用程序,使用xeElement可以很方便地提供支持3、XAttribute类XAttribute类用来处理元素的属性,属性是与元素相关联的"名称-值"对,每个元素中不能有名称重复的属性。

使用XAttribute类与使用xeElement类的操作十分相似,下面的示例演示了如何在创建可扩展标记语言树时为其添加一个属性:复制代码代码如下:公共静态x元素CreateCategoriesByXAttribute(){ x元素根=新x元素(' Categories ',新x元素(' Categories ',新XAttribute('CategoryID ',Guid).NewGuid()),新的xeelement(' CategoryName ','饮料')、新的元素('类别'),新的xa属性(' CategoryID '、Guid .NewGuid()),新的元素('类别名称','调味品'),新的元素('类别',新的xa attribute(' Category yid ',Guid .NewGuid())、new xeelement(' CategoryName '、' CategoryName '根。保存(路径);返回根;} 运行该示例将会得到一个可扩展标记语言文件,其内容为:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?类别类别类别id=' a6 D5 ef 04-3f 83-4e 00-aeaf-52444 add 7570 '类别名称/类别名称/类别类别类别类别id=' 67a 168 D5-6b 22-4d 82-9 BD 4-67 bec 88 C2建行'类别名称/类别名称/类别类别类别类别ID='17398f4e-5ef1-48da-8a72-1c类的方法比较少,常用的三个是:方法描述添加注释为该属性添加注解移动删除该属性设定值设定该属性的值以下的示例使用移动来删除第一个元素的分类编号属性:复制代码代码如下:公共静态void remove属性(){ xeelement xdoc=CreateCategoriesByXAttribute();XAttribute xattr=xdoc .元素("类别")。属性(' CategoryID ');xattr .移除();xdoc .保存(路径);} 运行该示例将会得到一个可扩展标记语言文件,其内容为:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?类别类别类别名称/类别名称/类别类别名称=' 5c 311 C1 e-ede 5-41e 5-93f 7-5d 8 B1 d 7a 0346 '类别名称第二个/类别名称/类别类别类别名称=' bfde 8db 5-df84-4415-b297-CD 04d 8db 9712 '类别名称/类别名称/类别作为尝试,试一试以下删除属性的方法:复制代码代码如下:公共静态void RemoveAttributeByDoc(){ xeelement xdoc=CreateCategoriesByXAttribute();XAttribute xattr=xdoc .属性(' CategoryID ');xattr .移除();xdoc .保存(路径);} 运行该示例将会抛出一个空引用异常,因为元素种类没有一个叫做分类编号的属性4、XDocument类对象类提供了处理可扩展标记语言文档的方法,包括声明、注释和处理指令。一个对象对象可以包含以下内容:对象个数说明XDeclaration一个用于指定可扩展标记语言声明中的重要组成部分,如文档编码和版本等xeElement一个指定文档的根元素XDocumentType一个表示一个xml DTDXComment多个可扩展标记语言注释。它不能是第一个参数,因为一个有效的可扩展标记语言文档不能以注释作为开始xp加工指令多个为处理可扩展标记语言的应用程序指定任何所需信息下面的示例创建了一个简单的可扩展标记语言文档,它包含几个元素和一个属性,以及一个处理指令和一些注释:复制代码代码如下:公共静态void CreateXDocument(){ XDocument xdoc=new XDocument(新的x处理调查(' XML-样式表,' title='EmpInfo ' ')),new xcoment('某些注释),新xeelement(' Root '),新xeelement(' Employees '),新xeelement(' Employee '),新xa属性(' id ',' 1 '),新xeelement(' Name ',' Scott Klein '),新xeelement(' Title ',' Geek '),新xeelement(' HireDate ',' 02/05/2007 '),新xdoc .保存(路径);} 运行该示例将会得到一个可扩展标记语言文件,其内容为:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?XML-样式表标题='EmpInfo '?-一些评论-根员工员工id='1 '姓名斯科特克莱因/姓名标题极客/职务雇佣日期02/05/2007/雇佣日期性别/性别/员工/员工/根!-更多评论- XDocument类包含多个与xeElement类相同的方法,具体内容可以参阅MSDN。

需要注意的是,处理节点和元素的大部分功能都可以通过XElement获得,只有在绝对需要文档级处理能力,需要访问注释、处理指令和语句时,才需要使用XDocument类。创建xml文档后,可以使用NodesAfterSelf返回指定的XElement元素之后的所有同级元素。请注意,此方法只包括返回集合中的同级元素,而不包括子元素。此方法使用延迟执行。下面的代码演示了这个过程:复制的代码如下: public static void nodessafterself(){ x element root=new x element(' categories ',new x element(' categorid ',guid.newguid()),new xelement ('categoryname ',' food '),new XElement('Description ','吃的东西'));foreach(根中的var项目。元素(“类别”)。元素(' CategoryID ')。nodessafterself()){控制台。WriteLine((作为XElement的项目)。价值);}}实施结果如下:clip_image001

使用LINQ的类来处理xml非常简单有效,包括创建、查询和操作xml。二、LINQ对xml编程的概念本节将介绍LINQ对xml编程的相关概念,例如如何加载xml、创建新的xml、操作XML信息和遍历XML文档。1.加载现有的xml使用LINQ到xml加载XML可以从各种数据源获得,如string、XmlReader、TextReader或file。下面的示例演示如何从文件加载xml:按照如下方式复制代码: public static void load from file(){ xe element root=xe element . load(路径);控制台。WriteLine(根。ToString());}也可以使用Parse方法从字符串加载xml:复制代码如下: public static void loadfromstring(){ xe element root=xe element . Parse(@ ' categories category yid 1/。类别名称类别名称描述软饮料、咖啡、茶、啤酒和麦芽酒/描述/类别/类别’;控制台。WriteLine(根。ToString());} 2.保存xml在前面的例子中,多次调用了XElement对象的Save方法来保存xml文档,这里就不重复了。3.创建xml在前面的示例中,XElement对象的构造函数被多次调用来创建xml文档,因此我在这里不再重复。需要注意的是,使用LINQ to xml创建xml文档时,会有代码缩进,这大大增强了代码的可读性。使用LINQ到xml在xml树中遍历xml非常简单。只需要使用XElement和XAttribute类中提供的方法。元素和元素方法提供了导航到一个或多个元素的方法。下面的示例演示如何遍历xml树并获取指定的元素:复制代码如下: public static void enum(){ xe element root=new xe element(' categories ');使用(NorthWindDataContext db=new NorthWindDataContext()){ root。添加(db。类别。Select (c=新的XElement ('Category ',新的XElement('CategoryName ',c . Category name)));} foreach(根中的var项目。元素('类别'){控制台。WriteLine(项。元素(' CategoryName ')。价值);}}}上述代码运行的结果是:clip_image002

是不是很简单呢?节点()、元素()、元素(名称)和元素(名称)方法为可扩展标记语言树的导航提供了基本功能。5、操纵xml LINQ到可扩展标记语言一个重要的特性是能够方便地修改可扩展标记语言树,如添加、删除、更新和复制可扩展标记语言文档的内容我。插入使用创极无限类的插入方法可以方便地向可扩展标记语言树添加内容:方法说明添加后自我紧跟在此节点之后添加指定的内容添加在自我之前紧邻此节点之前添加指定的内容在下面的示例中,使用添加后自我方法向现有可扩展标记语言中添加一个新节点:复制代码代码如下:公共静态void AddAfterSelf(){ xeElement root=xeElement .解析(@ '类别类别类别1/类别类别名称/类别名称描述软饮料、咖啡、茶、啤酒和啤酒/描述/类别/类别');XElement xele=root .元素("类别")。元素(“CategoryName”);xele .AddAfterSelf(新的xeelement(' AddDate ',DateTime .现在));根。保存(路径);} 运行该示例将会得到一个可扩展标记语言文件,其内容为:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?类别类别类别1/类别名称类别名称类别名称/类别名称添加日期2010-01-31t 03:08336051/添加日期描述软饮料、咖啡、茶、啤酒和麦芽酒/描述/类别/类别当需要添加一个元素到指定节点之前时,可以使用添加在自我之前方法二。更新在查询中更新可扩展标记语言内容可以使用以下几种方法:方法说明替换为用指定的内容来取代当前元素的内容替换全部用指定的内容来取代当前元素的子节点及相关的属性替换节点用指定的内容来取代文档或当前元素的子节点SetAttributeValue设置属性的值、添加属性或移除属性SetElementValue设置子元素的值、添加子元素或移除子元素在下面的示例中使用了替换为与SetElementValue方法对可扩展标记语言进行了更新操作:复制代码代码如下:公共静态void Update(){ xeelement root=xeelement .解析(@ '类别类别类别1/类别类别名称/类别名称描述软饮料、咖啡、茶、啤酒和啤酒/描述/类别/类别');根。元素("类别")。元素(' CategoryID ').替换为(新的xeelement(' ID ',' 2 ');根。元素("类别")。SetElementValue('CategoryName ','测试数据');根。保存(路径);} 运行该示例将会得到一个可扩展标记语言文件,其内容为:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?类别类别ID2/ID类别名称测试数据/类别名称描述软饮料、咖啡、茶、啤酒和麦芽酒/描述/类别/类别三。删除可以使用移除(XElement)与移除全部方法来删除xml。

在下面的示例中,使用了移除全部方法:复制代码代码如下:公共静态void Remove(){ xeElement root=xeElement .解析(@ '类别类别类别1/类别类别名称/类别名称描述软饮料、咖啡、茶、啤酒和啤酒/描述/类别/类别');根移除所有();根。保存(路径);} 运行该示例将会得到一个可扩展标记语言文件,其内容为:可扩展标记语言版本='1.0 '编码='utf-8 '?类别/在下面的示例中,使用了移动方法删除了可扩展标记语言的描述元素:复制代码代码如下:公共静态void Remove(){ xeElement root=xeElement .解析(@ '类别类别类别1/类别类别名称/类别名称描述软饮料、咖啡、茶、啤酒和啤酒/描述/类别/类别');根。元素("类别")。元素("描述")。移除();根。保存(路径);} 运行该示例将会得到一个可扩展标记语言文件,其内容为:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?类别类别类别1/类别类别名称类别/类别名称类别/类别6、处理属性爱达荷(爱达荷州的缩写)添加查询添加属性与添加元素师类似的,可以使用构造函数或者增加方法来添加属性:复制代码代码如下:公共静态void AddAttribute(){ xeelement root=new xeelement(' Categories ',new xeelement(' Category '),new XAttribute('CategoryID ',' 1 '),new xeelement(' CategoryName ','饮料),新的xeelement(' Description ','软饮料,咖啡,茶,啤酒和麦芽酒'));根。元素("类别")。添加(新的XAttribute('AddDate ',DateTime .现在。to短日期字符串()));根。保存(路径);} 运行该示例将会得到一个可扩展标记语言文件,其内容为:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?类别类别类别名称='1 '添加日期='2010-01-31 '类别名称/类别名称描述软饮料、咖啡、茶、啤酒和麦芽酒/描述/类别/类别二。检索检索属性可以使用属性(名称)方法:复制代码代码如下:公共静态void SelectAttribute(){ xeelement root=new xeelement(' Categories ',new xeelement(' Category '),new xa属性(' CategoryID ',' 1 '),new xeelement(' CategoryName ','饮料),新的xeelement(' Description ','软饮料,咖啡,茶,啤酒和麦芽酒')));XAttribute xattr=root .元素("类别")。属性(' CategoryID ');控制台WriteLine(xattr .名称);控制台WriteLine(xattr .价值);} 上述代码的运行结果为:类别一三。删除删除属性的操作是调用XAttribute对象的移动方法来完成的。本文总结本文介绍了查询的编程基础,即系统Xml。查询表达式命名空间中的多个查询类,这些类都是查询的支持类,它们使得处理可扩展标记语言比使用其他的可扩展标记语言工具容易得多。在本文中,着重介绍的是XElement、XAttribute和XDocument。可移植文档格式文件的扩展名(可移植文档格式的缩写)版下载,更容易阅读

版权声明:从查询表达式到可扩展置标语言的编程基�是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。