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="">
<title>A House in Aungier Street</title>
<author>
<name>Sheridan le Fanu</name>
<nationality>Irish</nationality>
</author>
<rating>eerie</rating>
</story>
<story ac ="">
<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项目\XMLTest\XMLTest\XMLFile1.xml", @"D:\文档\VS2010项目\XMLTest\XMLTest\XMLFile1.xsd");

使用时把路径替换成自己的路径

参考https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html

XML-1的更多相关文章

  1. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  2. .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

  3. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

  4. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  5. UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)

    最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...

  6. PHP中遍历XML之SimpleXML

    简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...

  7. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  8. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  10. C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”

    Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...

随机推荐

  1. Anaconda无法更新

    在安装完Anaconda,更新包时 C:\Users\Administrator>conda upgrade --all WARNING: The conda.compat module is ...

  2. POJ 1458 Common Subsequence(最长公共子序列)

    题目链接Time Limit: 1000MS Memory Limit: 10000K Total Submissions: Accepted: Description A subsequence o ...

  3. 【RSR】RSR如何配置BGP与BFD联动(动态路由)

    应用场景 企业租用运营商MSTP线路,配置BGP路由协议上网,由于企业本端出口路由器无法检测到运营商中间链路通信中断,导致路由收敛缓慢,无法快速的切换到其它备份线路,此时可以在路由器上启用BGP与BF ...

  4. 使用ImagesPipeline时候报错为:ModuleNotFoundError: No module named 'scrapy.contrib'

    刚开始我是这样写的: 报错为: 哈哈,经过查阅资料,其实他是存在的,接下来修改如下: 经过运行结果如下: 问题解决,哈哈哈,搞定!!!!!!!!!!!!

  5. JQuery 总结篇

    一.基础知识 1.jq的使用 在script块中: 方式1:$(function(){                                          $("[使用选择器] ...

  6. PB 报表数值列加%

  7. (二)Django自定义标签

    1.创建自定义标签 在项目的APP中新建一个Python Package-->blog_tags.py 代码: from django import template from ..models ...

  8. idea 中激活 JRebel

    JRebel介绍: JRebel是一款JVM插件,它使得Java代码修改后不用重启系统,立即生效.IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,修改才能 ...

  9. VisualStudio 连接 MySql 实现增删查改

    首先创建数据库,建立一个用户登录表 2.visualStudio默认是不支持MySql的,要想通过Ado.Net 操作MySql 需要在管理NeGet包添加对MySql.Data  和 MySql.D ...

  10. python实现scp功能

    最近公司有一个需求,需要把服务器A上的任务放到服务器B上,因为B上有HTTP,并且可以被外网访问,但是直接通过shell的scp,每次都需要输入密码.这里用python简单实现一下 直接上代码: im ...