首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

XML结成结构以及C#通过DTD验证规范性

2013-09-05 
XML组成结构以及C#通过DTD验证规范性XML 文档包含元素和属性等,它们提供一种灵活且功能强大的方法,为应用

XML组成结构以及C#通过DTD验证规范性
XML 文档包含元素和属性等,它们提供一种灵活且功能强大的方法,为应用程序和组织之间交换数据。所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
1、元素
元素是XML的主要构建模块,将xml数据划分为不同部分和语义的标签,如<note></note>
2、属性
属性可提供有关元素的额外信息,被置于元素的开始标签中,总是以名称/值的形式成对出现的。
<img src="computer.gif" />
元素的名称是 "img"。属性的名称是 "src"。属性的值是 "computer.gif"
3、名称空间    
类似于c#中的名称空间,用来隔离相同或不同的元素。
4、实体
实体是用来定义普通文本的变量,定义了一个变量等于某个字符串,然后在XML中就可以直接使用此变量,这个变量就叫做实体。
使用实体之前,必需先声时,声明语句位于xml文档的序言的内部子集中,实体声明必需使用大写方式,如:<!ENTITY myentity "这是一个实体"> ,ENTITY必需是大写的。使用实本时,在实体名称前面加上 & ,并表在后面加上分号:  ;。
<?xml version="1.0"?>
  <!DOCTYPE doc
   [
     <!ENTITY number "12345678">
   ]>
<message>
  <number>&number;</number>
</message>
解析后结果:
<message>
  <number>12345678</number>
</message>
5、注释 
文档的注解
6、PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
7、CDATA
CDATA 的意思是字符数据(character data)。在CDATA块中的字符将以原样输出
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
8、处理指令 格式<?name data?>,负责与处理器进行交互,每种xml处理器都有一些命令开关。而处理器指令就是调用这些开关的。每个处理器的开关都不尽相 同。<?xml version="1.0" ?> 这个处理指令是每个xml处理器都支持的。


若要指定允许的结构和 XML 文档的内容,可以编写 DTD(Document Type Definition) 、XDR 架构中或 XSD 架构,来验证文档是否符合规范,元素和标签使用是否正确。
下面通过DTD来说明,DTD的写法分两种,既可写在同一个xml文件中,也可单独写在另一个文件中。
1、DTD写在同一个xml文件中:
Persons.xml
/// <summary>/// 使用DTD验证xml文档格式/// </summary>/// <param name="filename">xml文件名</param>/// <returns>验证通过返回空字符串,否则返回错误提示信息</returns>public static string ValidXmlByDTD(string filename){    StringBuilder sb = new StringBuilder();    XmlReaderSettings settings = new XmlReaderSettings();    settings.DtdProcessing = DtdProcessing.Parse;    settings.ValidationType = ValidationType.DTD;    settings.ValidationEventHandler += delegate(object ss, ValidationEventArgs ee)    {        sb.AppendFormat("{0}", ee.Message);    };    using (XmlReader reader = XmlReader.Create(filename, settings))    {        try        {            while (reader.Read()) ;        }        catch (Exception ex)        {           //DTD如果有错误,会提示无效的内容模型            return "异常:" + ex.Message;        }    }    return sb.ToString();}


热点排行