C#-XML

  • XML用处

存储配置文件,存储数据用于远程传输等。.net提供了system.xml命名空间的类,用于读写xml文件(XmlTextReader、XmlWriter),分析xml文件结构(XmlNode、XmlDocument),转换xml文件格式成其他格式文件(XmlTransform),用xml类处理数据,用XPath类在xml文件查询。

  • 理解XML

XML。SGML通用标记语言的子集,这语言派生出HTML和XML。XML是与人工可读元数据相结合的人工可读数据。元素,包含一对标签和一个值。xml允许空白增强可读性,类似C#每行前面的空格。xml和html一样,都是由成对标记和数据组成<br /br>,/,<p/>代表一对P标签,其他类似。< />一对空标记

xml可按规则随意给元素起名(<city>berlin</city>),规则是名称是任何字母数字字符专用字符,没空白,以字母或下划线开始。例如元素<city>berlin</city>,名称是city,值是berlin。元素可嵌套,不能重叠(即在同一上级里重复,xml文件,从数据结构看,是一棵树),用ie打开xml即可查看xml的内容。

xml命名空间,在xsd文档(用xml表示数据库结构的文档),有xmlns=,代表这个xml的namespace,=后面是命名空间名,xmlns: 是引用其他命名空间。同名xml元素,用命名空间区分,例如,xs是用前缀xmlns标记的using的其他命名空间名,这里表示element标记来自xs命名空间<xs : element  name="address" type="xs:string" minOccurs="0"/>。

也可用特性表示xml内容。有时用元素表示,并嵌套;还可以用特性表示xml内容,一个特性,就是一个单元格数据,包含在一个元素内,这里的一个元素,代表一行数据。

xml内容里可以有转义字符。如&lt: 代表<,&apos: 代表单引号‘等;还可以用cdata标记这是整个字符串,这个字符串不包含语法方面的符合,例如<![cdata[[email protected]#$]]>中的[email protected]#$,就被标记成字符串。

注释和处理指令。如<? ?>是给电脑看的处理指令,<-- -->是给人看的注释,不能嵌套。例如这个处理指令把样式表与当前文件联系起来<?xml-stylesheet href="customers.css" type="text/css"?>

  • XSLT

是一个转换xml的转换器,xsl文件包含与xml元素对应的格式信息(如xml某个名称节点的换行br,段落p等),与xml文件一起,可把xml文件输出成html(把xlt在xml对应元素上的格式,加入到xml数据)、txt、word等几乎任何文件格式。可在xml文件中指定xls样式文件,<?xml-stylesheet type="text/xsl" href="cust.xsl"?>。样式文件cust.xlt中,body中没有标记命名空间的元素,会当做xml文件的样式(前面用ie打开xml,就是调用了ie中内置的xslt这个转换器,加载xml文件中绑定的xls文件,把xml显示出来)。样式文件,其实就是xhtml文件(用xml重写的html4.01),xlt中可以使用foreach循环,例如用来找xml文件中的所有指定的元素名称select=,还可以用value-of返回找到元素的值。需要注意的是xml中的标记一定要成对出现,html可省略后面的,例外是这种一个的标记<p/>。

  • XSD

描述数据库架构。

引用命名空间。例如xmlns:mstns=“http://tempuri.org/dataset1.xsd”

定义dataset元素内容,从这里开始,例子是连续的。例如<xs:element name="dataset1" msdata:isdataset="true">

定义dataset元素包含的数据数量。例如 <xs:conplextype> <xs:choice maxOccrurs="unbounded">,无限数据。

定义在dataset元素中的数据元素。例如<xs:element name="customers">

定义表的列。每开始一级,就加<xs:complexType>。<xs:sequence> <xs:element name ="custeomerID" type ="xs:string" />

定义表的主键。

其他可参看vs在线帮助中“xsd架构参考”

  • 写XML

读写XML,类似流和输入输出那章的内容。

写XML文件。用XmlTextWriter类,派生自XmlWriter类。过程是

XmlTextWriter xw new XmlTextWriter(@“本地目录和文件名.xml",system.text.encoding.utf8);//在指定目录新建指定的xml文件,指定字符集

xw.writestartdocument;//开始写文档

xw.writestartelement(”newdataset“);//写一个元素标签头

xw.writestratelement("customers");//再写一个元素标签头,因上一个元素没结束,所以这个嵌套在上一个元素内。

xw.writeelementstring(”coustomerID“,”ID1“);//在上一个标签头内容,写一个元素名和元素值

...//写其他元素

xw.writeendelement();上一个元素完成,customers的,对应数据库的一行数据

xw.writestartelement(”customers“);//写另一行数据

...

xw.writeendelement();//这行数据完成

xw.writeendelement();//newdataset元素dataset完成,dataset可含多个表

xw.writeendDocument();//完成文档写。

xw.flush();//内存的数据,提交到存储

xw.close();

...

XmlTextWriter类自动写xml文件的声明。没在这个文件写空白和非默认的格式信息。

  • DOM文档对象模型

XmlDataDocument用于同步DataSet和xml,继承自xmlDocument类,xmldoucument类是DOM的一个实现。

DOM。是接口,用于程序和脚本动态地访问和更新文档内容、文档结构、文档样式。XML文件和HTTP文件以节点树形式保存DOM标准,DOM是W3C的正式标准。DOM标准是一组标准,包括XML DOM、DHTML DOM(动态HTML文档的表示标准)。不可能支持整个COM标准,.NET框架包括对DOM Level 1 Core和DOM Level 2 Core规范的支持,还通过向DOM规范添加额外的对象、方法、属性来扩展DOM,Internet厂商一般也都这样做,具体厂商是如何执行的,需要参照厂商的文档。 DOM具体标准在www.w3.org/dom

XML DOM在.net的实现。XmlNode类和XmlDocument类实现XML DOM。XmlNode表示XML文件的一个基本部分。XmlDocument把整个文件表示为XmlNode对象的集合。

XmlNode类。从前面的可看出,XML文档就是一系列互相嵌套的元素和特性,都可转换为树结构,元素和特性都表示为节点,XmlNodeType枚举表示节点的类型,从技术上讲,特性是父元素的属性,使用XmlNode可以读取和设置节点属性。另外根据节点类型,派生出XMLAttribute类、XmlComment类、XmlElement类。XmlNode的NodeType属性包含元素element、特性Attribute、特性元素其他节点的文本内容text等,XmlNode的Attributes属性是此node的特性,XmlNode的haschildnodes属性,XmlNode的nextsibling属性获得树中下一个node,xmlNamedNodeMap是多个节点集合

XmlDocument类。继承自XmlNode类,XmlDocument的DocumentElement属性表示文档XML根元素。XmlDataDocument继承自xmlDocument继承在XmlNode。

  • 读XML文件

用xmlreader抽象类的3个派生类,xmlValidatingReader,XmlNodeReader类,XmlTextReader,返回用文档对象模型DOM承载的XML文件信息。xmlTextReader属性WhitespaceHandling表示空白如何处理。

读取过程。使用xmlTextReader读取文件,使用XmlDocument的Load方法,把内容加入到XmlDocument中,并按标准格式化,用XmlDocument的DocumentElement属性获取跟节点,用每个节点的NextSibling属性依次获取下一个节点,知道获取不到下一个节点,用XmlNode的name和value属性获取每个节点的名称和值,用节点的Attributes属性获取每个节点的特性集(保存到xmlNamedNodeMap的对象里,每个特性也有name和value属性)。

  • 转换XML

通过system.xml.Xsl命名空间的对象实现。如XslTransform类。

转换过程。创建XmlTextReader对象读xml文件,用XmlDocument的load方法标准化数据,用XslTransform的load方法读取xsl样式文件,创建MemoryStream对象,用读取了xsl的XslTransform对象的Transform方法转换XmlDocument中的数据,同时把转换后的数据保存到MemoryStream,把MemoryStream内容的起始位置设为1,创建关联了MemoryStream的StreamReader,用StreamReader的ReadToEnd方法,输出转换后的内容,这内容默认是html格式。

XslTransform类的transform方法有一些重载的格式,实现输出到MemoryStream以为的对象,如netStream跨网络发送转换后的数据,StringWriter发送给某个文件。

  • 在XML查询数据

用XPath标准。

时间: 2024-10-28 20:47:40

C#-XML的相关文章

Maven中,pom.xml文件报错

一:错误消息,如下图: aus 原因是本地仓库在org.codehaus.plexus:plexus-uils:pom:3.0.20下面没有jar文件,只有一个plexus-utils-3.0.20.pom.lastUpdated,如下图: 解决:将该文件夹删掉,然后右击项目:Maven->Update Project就可以了 若pom.xml里面还有类型的报错,就像这样解决就OK了

微信5.4 AndroidManifest.xml

1 <?xml version="1.0" encoding="utf-8" ?> 2 - <manifest android:versionCode="462" android:versionName="5.4.0.48_r794734" android:installLocation="auto" package="com.tencent.mm" xmlns:and

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

logback-spring.xml的schema

<?xml version="1.0" encoding="utf-8" ?> <configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"> </configuration>

Web.xml 中 metadata-complete 介绍

Servlet 3.0 的部署描述文件 web.xml 的顶层标签 <web-app> 有一个 metadata-complete 属性, 该属性指定当前的部署描述文件是否是完全的. 如果设置为 true,则容器在部署时将只依赖部署描述文件,忽略所有的注解(同时也会跳过 web-fragment.xml 的扫描,亦即禁用可插性支持,具体请看后文关于 可插性支持的讲解): 如果不配置该属性,或者将其设置为 false,则表示启用注解支持(和可插性支持).

关于java解析xml文件出现的问题

问题1:导入javax.xml.parsers.DocumentBuilderFactory出现问题,如图: 解决办法是:由于创建工程时有个默认的jre,重新创建工程改掉就解决了,如图: 问题2:出现1 字节的 UTF-8 序列的字节 1 无效,解决办法: 使用记事本打开xml文件--点击文件-另存为-修改编码方式为UTF-8 -覆盖保存,如图: 以后出现问题还会补充

XML

一.XML概述     定义:Extensible Makeup Language(可扩展标记语言);     作用:         1.存储数据,有良好的存储格式,多种语言通用         2.作为配置文件,许多框架都使用xml作为配置文件     语法:         1.文件后缀名必须为.xml;         2.文档声明必须写在第一行,且前面不能空格,一般写法:<?xml version="1.0" encoding="UTF-8"?>

Android 编译错误——布局 Error parsing XML: not well-formed (invalid token)

在修改了Android布局文件后,编译出现Error parsing XML: not well-formed (invalid token). 首先先排查xml文件的编码格式是否为UTF-8, <?xml version="1.0" encoding="utf-8"?> ,注意,从别处copy的要留意编码格式! 还有各个标签是否有遗漏,把鼠标箭头移到出错误的layout上 点击鼠标右键选择Source然后再选Format. 都没有问题,结果发现报错处(

MyBatis应用开发(2)应用之开发方式XML文件篇

1.1. 开发方法 有三种使用MyBatis的方法: (1)使用XML配置文件的方式. (2)使用注解方式. (3)使用API方式. 1.2. XML方式 1.2.1. 开发步骤 目标:使用MyBatis从数据库中查询t_person表的全部记录. MyBatis使用XML文件来配置数据库中的记录与Java对象之间的映射关系,实现了SQL语句和Java代码的分离. 使用MyBatis 的XML配置方式开发数据库应用的步骤如下所示: (1)编写POJO类Person. (2)编写Mapper接口P

web.xml 中的listener、filter、servlet加载及一些配置

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 Servlet