﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Michael's Space-文章分类-XML/Data Service</title><link>http://www.cppblog.com/MichaelLiu/category/2341.html</link><description>Technology changes the world, serves the people.</description><language>zh-cn</language><lastBuildDate>Mon, 26 May 2008 00:37:47 GMT</lastBuildDate><pubDate>Mon, 26 May 2008 00:37:47 GMT</pubDate><ttl>60</ttl><item><title>一句话描述XPath</title><link>http://www.cppblog.com/MichaelLiu/articles/13960.html</link><dc:creator>奔跑的阿甘</dc:creator><author>奔跑的阿甘</author><pubDate>Sat, 21 Oct 2006 10:31:00 GMT</pubDate><guid>http://www.cppblog.com/MichaelLiu/articles/13960.html</guid><wfw:comment>http://www.cppblog.com/MichaelLiu/comments/13960.html</wfw:comment><comments>http://www.cppblog.com/MichaelLiu/articles/13960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MichaelLiu/comments/commentRss/13960.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MichaelLiu/services/trackbacks/13960.html</trackback:ping><description><![CDATA[一句话描述XPath<br /><font size="2">Michael Saturday, October 21, 2006<br /><br />XPath类似OS文件系统的路径,它指向了XML树的一个或多个满足特定条件的节点(可以是元素或者属性),其中,AXIS的关系满足以下等式:(假设XXX是XML树中任一节点)<br /><strong><font size="3">\\* = //XXX/ancestor::* | //XXX/descendant::* | //XXX/following::* | //XXX/preceding::* | //XXX/self::*</font><br /><br /></strong>[全文完]</font><img src ="http://www.cppblog.com/MichaelLiu/aggbug/13960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MichaelLiu/" target="_blank">奔跑的阿甘</a> 2006-10-21 18:31 <a href="http://www.cppblog.com/MichaelLiu/articles/13960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XSLT浅谈</title><link>http://www.cppblog.com/MichaelLiu/articles/12880.html</link><dc:creator>奔跑的阿甘</dc:creator><author>奔跑的阿甘</author><pubDate>Sun, 24 Sep 2006 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/MichaelLiu/articles/12880.html</guid><wfw:comment>http://www.cppblog.com/MichaelLiu/comments/12880.html</wfw:comment><comments>http://www.cppblog.com/MichaelLiu/articles/12880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MichaelLiu/comments/commentRss/12880.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MichaelLiu/services/trackbacks/12880.html</trackback:ping><description><![CDATA[
		<p>XSLT浅谈<br />Michael 2006/09/24</p>
		<p>
				<font size="2">在"XML浅谈"一章，曾提到XML文档的内容可由XSLT经过转化处理后呈现给用户，今天我们着重讨论如何做到这点。<br />掌握XSLT需要牢记以下三条法则：<br />1.XSLT本身就是XML文档<br />2.XSLT转化后需要显示的内容由用户决定<br />3.XSLT转化的内容如何显示由用户决定</font>
		</p>
		<p>
				<font size="2">
						<strong>一 XSLT本身就是XML文档<br /></strong>
						<br />这意味着，编写XSL文件和编写一份普通的XML文档没什么区别。它需要有且仅有一个根结点，它的每个元素需要前后对称，等等。这些XML</font>
				<font size="2">文档的编写规范就是XSL的编写规范。<br />XSL文档的根节点是&lt;xsl:stylesheet&gt;，一般地，所有XSL文档的根结点描述为：<br />&lt;xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'&gt;<br />注意：用来定义xsl名字空间的URI地址是大小写相关的。<br />以下为本章示例XML文档book.xml：<br />&lt;?xml version="1.0"?&gt;<br />&lt;?xml:stylesheet type="text/xsl" href="book.xsl"?&gt;<br />&lt;source&gt;<br />&lt;book id="001"&gt; <br />     &lt;price&gt;USD100&lt;/price&gt; <br />     &lt;page&gt;1000&lt;/page&gt;<br />     &lt;book id ="002"&gt;partII&lt;/book&gt; <br />&lt;/book&gt;<br />&lt;/source&gt; </font>
		</p>
		<p>
				<font size="2">
						<strong>二 XSLT转化后需要显示的内容由用户决定<br /><br /></strong>XSLT是面向规则或者面向模板（TEMPLATE-ORIENTED）的语言，它定义一系列的针对源XML文档节点的规则，用于替换指定的XML文档节点</font>
				<font size="2">，最终生成的文档就是用户希望看到的内容。<br />所以，通过编写适用于特定节点的规则，这些节点就根据规则定义的格式呈现出来。<br />如果用户不希望看到某部分内容，只要不对这些内容节点制定规则，它们就不被显示。<br />在XSLT中，&lt;xsl:template&gt;元素用于制定一个规则，这条规则可适用于XML树的某个节点也可适用于多个节点，它可由元素的"match"属</font>
				<font size="2">性指定。<br />这种T-O方法允许用户自行定义灵活的表单生成各式各样的效果。<br />例如：<br />&lt;xsl:template match="/"&gt; <br />     &lt;xsl:apply-templates select="//book"/&gt; <br />&lt;/xsl:template&gt;</font>
		</p>
		<p>
				<font size="2">上述规则的含义是：<br />1)经过该XSL转化后的文档仅包含book元素<br />2)该book元素可以是任一节点的book元素</font>
		</p>
		<p>
				<font size="2">
						<strong>三 XSLT转化的内容如何显示由用户决定<br /><br /></strong>如何显示指定节点，也就是如何制定规则（TEMPLATE）的过程。<br />规则的内容就是如何定义样式，它可以是HTML的元素，或者XSLT本身定义的元素（如&lt;xsl:value-of&gt;,&lt;xsl:text&gt;等）。<br />例如：<br />&lt;xsl:template match="book"&gt; <br />     &lt;h3 style="color:blue"&gt; <br />          &lt;xsl:value-of select="name()"/&gt; <br />          &lt;xsl:text&gt; (id=&lt;/xsl:text&gt; <br />          &lt;xsl:value-of select="@id"/&gt; <br />          &lt;xsl:text&gt;)&lt;/xsl:text&gt; <br />     &lt;/h3&gt; <br />&lt;/xsl:template&gt;</font>
		</p>
		<p>
				<font size="2">上述规则的含义是：<br />1)这条规则对XML树的book节点进行转换<br />2)转换后的内容显示如下（蓝色3号大小）：<br /></font>
				<font color="#0000ff" size="3">book (id=001)<br />book (id=002)</font>
		</p>
		<p>
				<font size="2">XSLT中对同一个XML节点可以定义多条规则（由mode属性或者按优先级选择等），同时，一条规则可以适用于多个XML节点（设置"match"</font>
				<font size="2">属性时采用"|"运算符连接多个节点等）。<br /><br />最后，对于XML分析器转换XML文档时的过程简单总结一条：<br /><strong>分析器从根节点开始遍历XML文档，对每个节点，从XSL文档中寻找规则，若找到则进行节点转换，否则继续遍历，直到整颗树遍历完毕为止。在进行父节点转换时，如果XSL也定义了该父节点的某个子节点的规则，则需要检查是否有&lt;xsl:apply-templates&gt;元素，若没有则整个父节点（包括所有子节点）都将被父节点的规则替换，若有，则需要对该元素指定的子节点或者对所有子节点采用各自的规则进行替换。</strong></font>
		</p>
		<p>
				<font size="2">【完】</font>
		</p>
<img src ="http://www.cppblog.com/MichaelLiu/aggbug/12880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MichaelLiu/" target="_blank">奔跑的阿甘</a> 2006-09-24 16:02 <a href="http://www.cppblog.com/MichaelLiu/articles/12880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML浅谈</title><link>http://www.cppblog.com/MichaelLiu/articles/12877.html</link><dc:creator>奔跑的阿甘</dc:creator><author>奔跑的阿甘</author><pubDate>Sun, 24 Sep 2006 06:40:00 GMT</pubDate><guid>http://www.cppblog.com/MichaelLiu/articles/12877.html</guid><wfw:comment>http://www.cppblog.com/MichaelLiu/comments/12877.html</wfw:comment><comments>http://www.cppblog.com/MichaelLiu/articles/12877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MichaelLiu/comments/commentRss/12877.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MichaelLiu/services/trackbacks/12877.html</trackback:ping><description><![CDATA[
		<p>XML的由来</p>
		<p>Michael 2006/07/30</p>
		<p>
				<font size="2">一 HTML是种界面标识语言</font>
		</p>
		<p>
				<font size="2">第一次听到"XML"的人，如果对网页知识略知一二的话，应该会自然而然地联想到"HTML"，并发问：这个新事物的出现是不是和"HTML"有</font>
				<font size="2">着某种联系？<br />的确，从名称我们就可以知道，他们都是属于"标记语言(Markup Language)"，顾名思义，该语言采用某些"标签"来描述对象并呈现出某</font>
				<font size="2">种含义。XML是可扩展标记语言(eXtensible Markup Language)的简写，HTML是超文本标记语言(Hypertext Markup Language)的简</font>
				<font size="2">写。<br />HTML虽然是种标记语言，但是它标记的实际上是"界面(Presentation)"的描述，并通过HTML解释器解释后呈现出一种界面效果。比如：<br />&lt;!-- HelloWorld.html --&gt;<br />&lt;html&gt;<br />&lt;body&gt;<br />Hello, world!<br />&lt;/body&gt;<br />&lt;/html&gt;</font>
		</p>
		<p>
				<font size="2">&lt;!-- HelloWorldBold.html --&gt;<br />&lt;html&gt;<br />&lt;body&gt;<br />&lt;B&gt;Hello, world!&lt;/B&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</font>
		</p>
		<p>
				<font size="2">第二个网页在添加了"&lt;B&gt;"标签后显示出来的是粗体的"Hello, world!"。<br />HTML定义了大量的标签用来呈现各式各样的界面效果，它不关注被显示的具体内容，而只关心用哪种效果或者样式来显示这个内容。在实际</font>
				<font size="2">应用中，这些具体内容通常都以数据库的形式储存在服务器中，HTML利用嵌入其中的CGI/ASP/PHP等脚本读取数据库内容并以定义的样式通</font>
				<font size="2">过网页呈现出来。所以，简单地说，HTML是种界面标识语言。<br />当然，HTML也定义了部分标签用于表达内容的含义，比如"title"表示网页的标题，但是这些标签很少，不是HTML的核心。</font>
		</p>
		<p>
				<font size="2">二 为什么有XML?</font>
		</p>
		<p>
				<font size="2">XML的出现是互联网高速发展的产物。互联网的出现使得多个网络实体之间的信息通讯变得更加频繁，这种信息通讯要求跨平台跨网络跨硬</font>
				<font size="2">件，古老的HTML可以满足信息传递的要求，但是前面提到，HTML的核心在于被传递信息的呈现，而非信息本身。最初在信息服务方所拥有的</font>
				<font size="2">信息架构在通过HTML传递后完全丧失了结构，而被当作简单的信息串以某种格式显示出来，造成信息接收方对杂乱无章的信息没有足够的认</font>
				<font size="2">知。<br />XML横空出世，它完美的描述了信息的结构性，把焦点置在了信息内容本身，从而解决了信息的无损耗承载（信息的"内容"和"含义"都被正</font>
				<font size="2">确传载），而且XML格式简单易用。这给了信息接收方更多的访问空间，比如网络搜索，有了XML利器变得简单。<br />XML是这么一种语言，和HTML类似的语法，通过大量的"标签"来标记元素，和HTML不同的是，这些"标签"完全是由用户自行定义，所以它是</font>
				<font size="2">一种元语言(Meta Language)，可以把HTML想象成由XML定义出来的包含一组固定样式"标签"(比如&lt;B&gt;, &lt;HR&gt;等)的语言。<br />在前面的HelloWorldBold.html例子中，可以视为传递这么一种信息：<br />&lt;XML version="1.0"&gt;&lt;greeting&gt;Hello, world!&lt;/greeting&gt;&lt;/XML&gt;<br />这个XML脚本告诉我们"Hello, world!"是一种问候，而不像HTML语言定义的只是一个简单的普通的字符串，XML赋予了字符串的含义。<br />当我想知道这个世界上不同国家的人如何表达这种问候时，我只需要搜索"greeting"字符串就可以获得想要的信息（比如"Hello, </font>
				<font size="2">world!"和"你好，世界！"）。<br />不同于HTML，XML通过CSS(Cascading Style Sheets)或XSL(Extensible Stylesheet Language)来呈现它所要表达的内容。CSS在</font>
				<font size="2">HTML中只是做为一种补充的样式，在XML中则完全充当显示样式的全职角色。XSL则允许用户在原XML文档的基础上采用XSL语句对源文档进</font>
				<font size="2">行特定的转化，生成一个新的XML文档，这个文档的结构已经根据我们自己编写的规则发生变化，并且会呈现出各种各样的效果（在"XSLT原</font>
				<font size="2">理"一文详细介绍）。<br />如果我们深入理解和应用XML的话，会发现它和数据库表的描述是多么类似。然而，数据库产品多式多样，彼此通讯变得昂贵，XML作为一种</font>
				<font size="2">网络通讯数据标准逐渐浮现。<br />总之，XML是一种比HTML更抽象的用来描述结构化数据的语言，它是一种跨平台的数据标准。它将成为互联网络家族的一个关键成员。</font>
		</p>
		<p>
				<font size="2">【完】<br /><br /></font>
		</p>
<img src ="http://www.cppblog.com/MichaelLiu/aggbug/12877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MichaelLiu/" target="_blank">奔跑的阿甘</a> 2006-09-24 14:40 <a href="http://www.cppblog.com/MichaelLiu/articles/12877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>