??xml version="1.0" encoding="utf-8" standalone="yes"?> 当XML元素被解析的时候,XML元素内部的文本也?x)被解? <message>This text is also parsed</message> XML解析器这样做的原因是XML元素内部可能q包含了(jin)别的元素Q象下面的例子,name元素内部包含?jin)first和last两个元素: <name><first>Bill</first><last>Gates</last></name> 解析器会(x)认ؓ(f)上面的代码是q样? <name> -------------------------------------------------------------------------------- 转义字符 如果在XML文档中用类?<" 的字W? 那么解析器将?x)出现错误,因?f)解析器会(x)认ؓ(f)q是一个新元素的开始。所以不应该象下面那样书写代? <message>if salary < 1000 then</message> Z(jin)避免出现q种情况Q必d字符"<" 转换成实体,象下面这? <message>if salary < 1000 then</message> 下面是五个在XML文档中预定义好的实体: < < 于? 实体必须以符?&"开_(d)以符?;"l尾? 注意: 只有"<" 字符?&"字符对于XML来说是严格禁止用的。剩下的都是合法的,Z(jin)减少出错Q用实体是一个好?fn)惯? -------------------------------------------------------------------------------- CDATA部g 如果文本包含?jin)很多?<"字符?&"字符——就象程序代码一P那么最好把他们都放到CDATA部g中? 一?CDATA 部g?<![CDATA[" 标记开始,?]]>"标记l束: <script> 在前面的例子中,所有在CDATA部g之间的文本都?x)被解析器忽略? CDATA注意事项: 同样要注意在字符?]]>"之间没有I格或者换行符? ============================================================================================ 下面的字W在 [XML]中被定义?I白(whitespace)字符Q?
XML 解析器通常情况下会(x)处理XML文档中的所有文本?
<first>Bill</first>
<last>Gates</last>
</name>
不合法的XML字符必须被替换ؓ(f)相应的实体?
> > 大于?
& & ?
' ' 单引?
" " 双引?
在CDATA内部的所有内定w?x)被解析器忽略?
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
then
{ return 1 }
else { return 0 } }
]]>
</script>
CDATA部g之间不能再包含CDATA部gQ不能嵌套)(j)。如果CDATA部g包含?jin)字W?]]>" 或?<![CDATA[" Q将很有可能出错哦?
I格 ( )
Tab (	)
回R (
)
换行 (
)
]]>
对html文g而言Q空g重要Q然而,对xml而言Q默认立场就是要保留I格l点Q空格结点的解释见下文)(j)?br>Ҏ(gu)xml规范的规定,所谓空格是四种字符的Q意组合序列:(x)
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?br>I格字符QspaceQ,对应字符gؓ(f) #x20
q回字符QCarriage ReturnQ?对应字符gؓ(f) #xD
新行字符QNewlineQ?对应字符gؓ(f) #xA
x字符QTabQ?对应字符gؓ(f) #x9?br>xml文g的空g?x)Ş成结点,也就是空格结炏V空格结点属于文字结点类型?br>对xml和xslt而言Q空格结点会(x)牉|C个议题:(x)
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?br>1。在xml输入文g中决定哪些空格是重要的,xslt处理器要看见q些I格l点。而决定的密钥是xml:space属性?br>2。在xsl模板文g中决定哪些空格是重要的,xslt处理器应它复制到结果树(wi)中,而决定的密钥是xsl:strip-space
和xsl:preserve-spaceq两个命令?br>“重要和不重要的I格l点?br>Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?br>若某lg的内容只能放lgQ则该组件中的空格结点就是不重要的(InsignificantQ;
如果某组件的内容?PCDATA的类型,则其内的I格l点应视为重要的QSignficantQ?br>至于lg内容h?jin)文字内容和lg的情况则无从评判Q应视组件及(qing)其内容之语意而定?br>xslt处理器接触到xml输入文g之前Q会(x)先由xml分析器进行分?br>Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?br>Q?Qxml:space属性可以改变后l接手的xml应用E序处理I格l点的模式,例如Qxslt处理器就?x)受xml:space属性媄(jing)响?br>Q?Qxml文g中Q何一列标记或内容的结l尾W号全部?x)换成单一新行字符Q?xAQ?br>Q?Q属性glxml应用E序之前Qxml分析器也应该先对属性值做规范化的操作。这是因Z同的操作pȝ每一行文字列
的结֭W有不同的组合,例如Qwindowspȝ?x)由q回字符呉|行字W组成结P而Unixpȝ则仅由新行字W组
成结受xml分析器在dxml文g之后Q便先行所有结h成单一新行字符Q不仅统一?jin)不同系l间不同
l尾W号设计的差异性,同时也简化了(jin)后箋xml应用E序的的操作隑ֺ。这样一个处理过E称为“规范化(Normalization)”?br>aQ每一文字列的l尾W号都要规范化成单一的新行字W(#xAQ?br>bQQ何一个空格符Q?x20?xD?xA?x9Q都应换成一个空格字W(#x20Q?br>cQ属性g若含有字参码Q则应替换成该参考字W,例如Q?br>?x)换成新行字W?#xA)?br>dQ属性D含有实体参考,则应以其替换文字替换?br>eQ除此之外,M字符都应直接攑օ规范化属性g?br>fQ最后,如果属性类型不是CDATAQ则xml分析器应该再q一步把属性值前后的I格字符序列删除Q而且属性g?br>若有I格序列Q也应该替换成单一I格字符?br>xslt处理器把xml输入文g和xsl模板文g的结构树(wi)建好之后Q会(x)现把lg中相?c)文字l点合ƈ成单一的文字结点,然后再把
一些文字结Ҏ(gu)掉。然而,如果文字l点W合下列条g之一Q就?x)被保留下来Q?br>Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?br>Q?Q文字结点的父组件是I格保留lg名称集(Set Of Whitespace-preserving Element NamesQ中的一员?br>Q?Q文字结点中臛_有一个非I格W?br>Q?Q文字结点的某个先lg中有xml:space属性,其gؓ(f)preserveQ而且较近的祖先组件中没有其他xml:space属性gؓ(f)default?br>除此之外的文字结炚w会(x)被抽掉?br>对xsl模板而言Q所谓的I格保留lg名称集只有一个xsl:textlg可用。xsl模板文g的空格结炚w?x)被删除Q但是,如果I格l?br>点出现在xsl:textlg中就?x)被保留下来?/p>
2、格式良好的(well-formed)XML文档是指一个遵守XML语法规则Qƈ遵守XML规范的文;
3?#8220;格式良好”的xml文档除了(jin)要满x元素唯一的特性之外,q包括:(x)起始标签和结束标{ֺ当匹配,l束标签是必不可的Q?/p>
4、大写应一_(d)(x)XML对字母的大小写是敏感的,和是完全不同的两个标{,所以结束标{֜匚w时一定要注意大小写一_(d)
5、元素应当正嵌套:(x)子元素应当完全包括在父辈元素中。有效的(valid)XML文档是指一个遵守XML语法规则Qƈ遵守相应DTD文g规范的XML文?/p>
6、显?dng)有效的则一定是格式良好的;但格式良好的Q不一定是有效的?/p>
在很多研讨会(x)和培训班上我遇到q许多hQ他们还不明白ؓ(f)什么要使用XML也不知道如何
在他们的应用中?span lang="EN-US">XML。一些来自诸?span lang="EN-US">Gartner公司的报告徏议说Q商业公怸能再?span lang="EN-US">
局外h?jin),不能?span lang="EN-US">XML|之不理。如果你q不清楚XML到底有什么好处的话,你ƈ不是?span lang="EN-US">
一的h?span lang="EN-US">
我决定把与h们和媒体关于XML话题的交谈整理成文,列出XML在应用中的五个最令h?span lang="EN-US">
q用法。尽这些ƈ不能包含XML的所有潜在应用,臛_是些最重要的领域?span lang="EN-US">
1、数据交?span lang="EN-US">
?span lang="EN-US">XML在应用程序和公司之间作数据交换已不是什么秘密了(jin)Q毫无疑问应被列为第一位?span lang="EN-US">
那么Z?span lang="EN-US">XML在这个领域里的地位这么重要呢Q原因就?span lang="EN-US">XML使用元素和属性来描述?span lang="EN-US">
据。在数据传送过E中Q?span lang="EN-US">XML始终保留?jin)诸如?span lang="EN-US">/子关p这L(fng)数据l构。几个应用程?span lang="EN-US">
可以׃n和解析同一?span lang="EN-US">XML文gQ不必用传l的字符串解析或拆解q程?span lang="EN-US">
相反Q普通文件不Ҏ(gu)个数据段做描q?span lang="EN-US">(除了(jin)在头文g?span lang="EN-US">)Q也不保留数据关pȝ构。
?span lang="EN-US">XML做数据交换可以应用E序更具有弹性,因ؓ(f)可以用位|?span lang="EN-US">(与普通文件一?span lang="EN-US">)或用?span lang="EN-US">
素名(从数据库)来存?span lang="EN-US">XML数据?span lang="EN-US">
2?span lang="EN-US">Web服务
Web服务是最令hȀ动的革命之一Q它让用不同系l和不同~程语言的h们能够相互交
和分n数据。其基础在于Web服务器用XML在系l之间交换数据。交换数据通常?span lang="EN-US">XML?span lang="EN-US">
讎ͼ能协议取得规范一_(d)比如在简单对象处理协?span lang="EN-US">(Simple Object Access Protoc
ol, SOAP)q_上?span lang="EN-US">
SOAP可以在用不同~程语言构造的对象之间传递消息。这意味着一?span lang="EN-US">C#对象能够与一?span lang="EN-US">
Java对象q行通讯。这U通讯甚至可以发生在运行于不同操作pȝ上的对象之间?span lang="EN-US">DCOM
, CORBA?span lang="EN-US">Java RMI只能在紧密耦合的对象之间传递消息,SOAP则可在松耦合对象之间?span lang="EN-US">
递消息?span lang="EN-US">
3、内容管?span lang="EN-US">
XML只用元素和属性来描述数据Q而不提供数据的显C方法。这PXML提供了(jin)一个优
U的方法来标记独立于^台和语言的内宏V?span lang="EN-US">
使用?span lang="EN-US">XSLTq样的语a能够L地将XML文g转换成各U格式文Ӟ比如HTML, WML, PD
F, flat file, EDI, {等?span lang="EN-US">XMLh的能够运行于不同pȝq_之间和{换成不同格式
目标文g的能力得它成ؓ(f)内容理应用pȝ中的优秀选择?span lang="EN-US">
4?span lang="EN-US">Web集成
现在有越来越多的讑֤也支?span lang="EN-US">XML?jin)。?span lang="EN-US">Web开发商可以在个人电(sh)子助理和览器之?span lang="EN-US">
?span lang="EN-US">XML来传递数据?span lang="EN-US">
Z么将XML文本直接送进q样的设备去呢?q样作的目的是让用户更多地自己掌握数?span lang="EN-US">
昄方式Q更能体验到实践的快乐。常规的客户/服务(C/S)方式Z(jin)获得数据排序或更
换显C格式,必须向服务器发出甌Q?span lang="EN-US">XML则可以直接处理数据,不必l过向服务器?span lang="EN-US">
h?span lang="EN-US">-q回l果q样的双向“旅E”,同时在设备也不需要配制数据库?span lang="EN-US">
甚至q可以对讑֤上的XML文gq行修改q将l果q回l服务器。想像一下,一台具有互
联网功能q支?span lang="EN-US">XML的电(sh)冰箱会(x)l市(jng)场带来多么大的冲d。你从此不必早vd牛奶
?jin)?span lang="EN-US">
5、配?span lang="EN-US">
许多应用都将配制数据存储在各U文仉Q比?span lang="EN-US">.INI文g。虽然这L(fng)文g格式已经?span lang="EN-US">
用多qƈ一直很好用Q但?span lang="EN-US">XMLq是以更ZU的方式ؓ(f)应用E序标记配制数据。?span lang="EN-US">.
NET里的c,?span lang="EN-US">XmlDocument?span lang="EN-US">XmlTextReaderQ将配制数据标记?span lang="EN-US">XML格式Q能使其更具
可读性,q能方便地集成到应用pȝ中去。?span lang="EN-US">XML配制文g的应用程序能够方便地处理
所需数据Q不用象其他应用那样要经q重新编译才能修改和l护应用pȝ?span lang="EN-US">
如前所qͼq里提到的五U?span lang="EN-US">XML的途径不包括全部场合?span lang="EN-US">