1.什么是XML
xml即 Extensible Markup Language,中文叫可扩展标记语言,是一种具有结构性的标记语言。
2.Xml文档的构成
XML文档即用xml语言编写的文档,它包括以下几部分:
2.1XML元素
XML元素由一个开始标记和一个结束标记,以及开始和结束标记之间的数据组成,如
<book>马克思主义</book>
注意:
1)XML是区分大小写的,比如<book> 和<BOOK>是两个不同的元素;
2)XML元素之间不允许重叠,即必须在父元素内关闭所有子元素,如下是错误的;
<book> <title>马克思主义 <author>马克思 </title></author> <book>
正确的XML
<book> <title>马克思主义</title> <author>马克思</author> <book>
3)所有元素都必须关闭,空元素<book></book>可以使用简短语法在开始标签关闭,如<book/>
4)XML文档只能有一个根元素,比如下面是错的
<? verson="1.0" ?> <book>马克思主义</book> <book>列宁主义</book>
5)元素和节点的区别:XML文档是由各个节点组成的,XML节点包括XML元素,XML声明,XML元素内的文本和特性等等。
2.2 特性
特性即元素的属性,比如
<book title='马克思主义'></book>
特性也是存储数据的一种方式,和在元素体内存储数据不同的是,在元素体内存储数据更易于阅读,而在特性中存储数据文档的大小会更小,因为使用特性减少了元素的换行和缩进。
2.3XML声明
xml声明用来声明文件的版本,使用的字符集和XML文档是否依赖其他文件,比如
<?xml verson ="1.0" encoding="utf-8" standalone="yes"?>
verson用于声明XML的版本,有1.0和1.1两个版本,xml维护组织建议使用1.0,.net只支持1.0版本;
encoding表示文档使用的字符集,standalone表示XML文档是否依赖其他文件,有yes、no两个值。
2.4 XML名称空间
在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
这个 XML 文档携带着某个表格中的信息:
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
这个 XML 文档携带有关桌子的信息(一件家具):
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突。
XML 解析器无法确定如何处理这类冲突。
参考http://www.w3school.com.cn/xml/xml_namespaces.asp
可以使用名称空间解决冲突问题,例如
<table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </table>
名称空间的定义方式:使用xmls特性:前缀="名称空间uri",定义了名称空间后就可以在其子元素中使用该前缀表示该元素是属于某个名称空间的。
也可以使用xmls定义默认的命名空间,不使用前缀
<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
3.4XML应遵循的原则
1)有且只有一个根元素;
2)每一个元素都要进行关闭;
3)没有重叠的元素,所有的元素都要在父元素内关闭;
4)所有特性都要放在引号内
3.5使用XSD验证XML文档
3.5.1使用VS创建XSD
在VS项目中添加并编写好XML文档后可以让VS创建对应的XSD文档,如下图打开XML文件,在VS菜单上找到创建XSD菜单创建架构
创建好XSD后可以发现再次编辑对应的XML文件有提示了,因为VS自动把当前文件链接到刚刚创建的架构。
可以为一个XML文件链接几个架构,方法是打开XML文件->鼠标右键属性->架构,然后在下图中添加或者选中使用的架构
3.5.2 代码验证XML文件是否符合架构
<?xml version="1.0" encoding="utf-8" ?> <stories> <story ac="98"> <title>A House in Aungier Street</title> <author> <name>Sheridan le Fanu</name> <nationality>Irish</nationality> </author> <rating>eerie</rating> </story> <story ac ="97"> <title>The Signalman</title> <author> <name>Charles Dickens</name> <nationality>English</nationality> </author> <rating>atmospheric</rating> </story> </stories>
public static string XmlValidationByXsd(string xmlFile, string xsdFile, string namespaceUrl = null) { StringBuilder sb = new StringBuilder(); XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas.Add(namespaceUrl, xsdFile); settings.ValidationEventHandler += (x, y) => { sb.AppendFormat("{0}|", y.Message); }; using (XmlReader reader = XmlReader.Create(xmlFile, settings)) { try { while (reader.Read()) ; } catch (XmlException ex) { sb.AppendFormat("{0}|", ex.Message); } } return sb.ToString(); }
string validMsg = XMLValidationByXsd(@"D:文档VS2010项目XMLTestXMLTestXMLFile1.xml", @"D:文档VS2010项目XMLTestXMLTestXMLFile1.xsd");
使用时把路径替换成自己的路径
参考https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html