﻿<?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>BlogJava-&lt;h3&gt;Rookie&lt;/h3&gt;-随笔分类-技术问题</title><link>http://www.blogjava.net/Rookie/category/28662.html</link><description>&lt;h4&gt;Headache English&lt;/h4&gt;</description><language>zh-cn</language><lastBuildDate>Sat, 19 Jan 2008 13:57:01 GMT</lastBuildDate><pubDate>Sat, 19 Jan 2008 13:57:01 GMT</pubDate><ttl>60</ttl><item><title>google  搜索参数问题</title><link>http://www.blogjava.net/Rookie/archive/2008/01/18/176330.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Fri, 18 Jan 2008 13:01:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/18/176330.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/176330.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/18/176330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/176330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/176330.html</trackback:ping><description><![CDATA[<p>昨天弄servlet实现搜索引擎前端，发现google&nbsp;搜索参数有很多参数，不明白，大家来看看，知道的顺便告我一下；<br />
<br />
<a href="http://www.google.cn/search?complete=1&amp;hl=zh-CN&amp;newwindow=1&amp;q=google&amp;btnG=Google+%E6%90%9C%E7%B4%A2&amp;meta=&amp;aq=-1&amp;oq">http://www.google.cn/search?complete=1&amp;hl=zh-CN&amp;newwindow=1&amp;q=google&amp;btnG=Google+%E6%90%9C%E7%B4%A2&amp;meta=&amp;aq=-1&amp;oq</a>=</p>
<p><span style="color: red">complete<br />
hl：区域<br />
newwindow<br />
q：查询关键字<br />
btnG<br />
meta<br />
aq<br />
oq</span><br />
<br />
<a href="http://www.google.cn/search">http://www.google.cn/search</a>?会跳转到<a href="http://www.google.cn/webhp">http://www.google.cn/webhp</a>页面；<br />
<a href="http://www.google.cn/search">http://www.google.cn/search?q=123</a>就可以搜索，搞不懂；</p>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/Rookie/aggbug/176330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-18 21:01 <a href="http://www.blogjava.net/Rookie/archive/2008/01/18/176330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SERVLET 学习(二) SERVLET技术概述</title><link>http://www.blogjava.net/Rookie/archive/2008/01/18/176327.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Fri, 18 Jan 2008 12:51:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/18/176327.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/176327.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/18/176327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/176327.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/176327.html</trackback:ping><description><![CDATA[一，SERVLET 作用<br />
读取客户程序发送来的显式数据(表单数据)；<br />
读取客户程序发送来的隐式数据(请求报头)；<br />
生成相应的结果；<br />
发送显式的数据给客户程序（HTML）；<br />
发送隐式的数据给客户程序(状态代码和响应报头)；<br />
<br />
优点：高效，便利，功能强大，可移植性强，花费少，安全<br />
<br />
二，SERVLET 生命周期<br />
init：仅在servlet首次载入时执行一次。不是每次请求都要调用。<br />
service：在新线程中由服务器为每个请求而调用。发送到doGet，doPost等。不要覆盖这个方法！<br />
doGet, doPost, doXxx：处理GET, POST, 等请求。覆盖这些方法以提供期望的行为。<br />
destroy：在服务器删除servlet的实例时调用。不是每次请求后都调用。<br />
<br />
三，例子<br />
下面是看《Servlet与JSP核心编程第二版》测试例子；<br />
给大家推荐一个网站：<a href="http://chinesedocument.com/">http://chinesedocument.com/</a><br />
看名字就应该知道关于什么的了，上面东西挺多的，不错；<br />
<br />
说明：<br />
chapter2,chaper3:servlet基础，请求参数；<br />
chapter4：request请求头查看，post，get方式；<br />
chapter5: 简单搜索引擎前端，sendError，sendRedirect测试；测试用例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;http://www.google.cn/search?q=&#8221;&nbsp;&nbsp;&nbsp; &#8220;sendRedirect&#8221;<br />
chapter6：ContentType测试<br />
chapter7：cookie测试，servlet:RegistrationForm 简单注册页面，，使用cookie的值预先填写表单的 字段，如果未找到相应的cookie则使用默认值；Registration servlet：基于接收到的请求参数创建cookie，如果得到所有的参数则显示这些值，如果任何参数缺失，则重定向到表单；<br />
chapter8：session实现一个简单购物车；流程：登陆（Login servlet）--商品列表（ShopForm servlet）&lt;----&gt;挑选（AddItem servlet）<br />
<br />
测试工程<a href="/Files/Rookie/servlet.rar">servlet.rar</a><br />
<br />
由于jar文件太大，工程中没有jar保，可自己添加；<br />
工程中用到有：servlet-api.jar，dom4j-1.6.1.jar，jaxen-1.1-beta-6.jar，pull-parser-2.1.10.jar，jaxme-api-0.3.jar，jsr173_1.0_api.jar，msv-20030807.jar，relaxngDatatype-20030807.jar，isorelax-20030108.jar，jtidy-4aug2000r7-dev.jar，xsdlib-20030807.jar，xpp3-1.1.3.3.jar<br />
由于购物车中用到了解析xml，所以Jar包一下就多了；<br />
<br />
购物车没有数据库，我用dom4j解析xml，然后把数据存放在session中，觉得很别扭；对dom4j不是很熟悉，解析那部分做的不好，大家给多提提意见；书中有个refresh例子，还没看明白；说看明白实现了给我发一份啊；
<img src ="http://www.blogjava.net/Rookie/aggbug/176327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-18 20:51 <a href="http://www.blogjava.net/Rookie/archive/2008/01/18/176327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SERVLET 学习(一) http协议</title><link>http://www.blogjava.net/Rookie/archive/2008/01/18/176314.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Fri, 18 Jan 2008 11:46:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/18/176314.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/176314.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/18/176314.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/176314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/176314.html</trackback:ping><description><![CDATA[一，&nbsp;HTTP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP(Hypertext Transfer　Protocol, 超文本传输协议)，用于从WWW服务器传输超文本到本地浏览器的传输协议。你可以通过协议定制传送的内容，从而减少网络传输。HTTP协议是以TCP/IP为基础的高层协议。现在广泛使用的版本HTTP/1.1。<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;HTTP协议基于请求/响应模式(Request/Response).客户与服务器建立连接后，按照协议规定格式，发送请求到服务器，客户得到请求后，返回响应信息给客户。HTTP使用的端口号，通常为80。<br />
二，URL<br />
HTTP URL (包含了用于查找某个资源的足够的信息)的格式如下：<br />
<a href="http://host[%22:%22port][abs_path/">http://host[":"port][abs_path</a>]<br />
http表示要通过HTTP协议来定位网络资源；host表示合法的Internet主机域名或者IP地址；port指定一个端口号，为空则使用缺省端口80；abs_path指定请求资源的URI；如果URL中没有给出abs_path，那么当它作为请求URI时，必须以&#8220;/&#8221;的形式给出，通常这个工作浏览器自动帮我们完成。<br />
http://www.microsoft.com/china/index.htm。它的含义如下：<br />
1.http://：代表超文本传输协议，通知microsoft.com服务器显示Web页，通常不用输入；<br />
2.www：代表一个Web(万维网)服务器；<br />
3.Microsoft.com/：这是装有网页的服务器的域名，或站点服务器的名称；<br />
4.China/：为该服务器上的子目录，就好像我们的文件夹；<br />
5.Index.htm：index.htm是文件夹中的一个HTML文件(网页)。<br />
三，HTTP 工作原理<br />
　　HTTP协议是基于请求/响应范式的(相当于客户机/服务器)。一个客户机与服务器建立连接后，发送一个请求给服务器，请求方式的格式为：统一资源标识符(URL)、协议版本号，后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后，给予相应的响应信息，其格式为一个状态行，包括信息的协议版本号、一个成功或错误的代码，后边是MIME信息包括服务器信息、实体信息和可能的内容。<br />
　　许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理和服务器之间通过一个单独的连接来完成。在Internet上，HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP80，但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协协议之上才能完成。HTTP只预示着一个可靠的传输。<br />
　　这个过程就好像我们打电话订货一样，我们可以打电话给商家，告诉他我们需要什么规格的商品，然后商家再告诉我们什么商品有货，什么商品缺货。这些，我们是通过电话线用电话联系(HTTP是通过TCP/IP)，当然我们也可以通过传真，只要商家那边也有传真。<br />
四，HTTP 请求，应答组成<br />
<a href="http://www.cnpaf.net/Class/HTTP/0532918532641885.html">http://www.cnpaf.net/Class/HTTP/0532918532641885.html</a>
<img src ="http://www.blogjava.net/Rookie/aggbug/176314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-18 19:46 <a href="http://www.blogjava.net/Rookie/archive/2008/01/18/176314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(九) XML 编辑器 XMLSpy</title><link>http://www.blogjava.net/Rookie/archive/2008/01/14/175280.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Mon, 14 Jan 2008 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/14/175280.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/175280.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/14/175280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/175280.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/175280.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; color: #000000; font-family: Helvetica,Arial"><strong>Altova XMLSpy&#169; 2005 </strong>是业界标准XML的开发环境，可用于涉及XML、XML Schema、XSLT、XQuery、SOAP、WSDL和Web服务技术的企业级应用的设计、编辑和调试。它是提高J2EE、.NET和数据库开发人员开发效率的终极利器。 <br />
<br />
<br />
一个中文破解下载地址；<a title="XMLSpy2006" href="http://www.hanhao.cn/download/AltovaXMLSpy2006.rar">XMLSpy2006</a><br />
<br />
中文用户手册：<a href="http://bbs.xml.org.cn/xmlspy2005/spyentdefaulthomepage.htm">http://bbs.xml.org.cn/xmlspy2005/spyentdefaulthomepage.htm</a><br />
主要内容有：<span style="font-size: 10pt; color: #000000; font-family: Helvetica,Arial">XML的编辑与验证</span>，<span style="font-size: 10pt; color: #000000; font-family: Helvetica,Arial">Schema/DTD的编辑与验证</span>，<span style="font-size: 10pt; color: #000000; font-family: Helvetica,Arial">XSLT的编辑与转换</span></span>
<img src ="http://www.blogjava.net/Rookie/aggbug/175280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-14 18:48 <a href="http://www.blogjava.net/Rookie/archive/2008/01/14/175280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(八) DTD XML与Schema基础</title><link>http://www.blogjava.net/Rookie/archive/2008/01/14/175277.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Mon, 14 Jan 2008 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/14/175277.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/175277.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/14/175277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/175277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/175277.html</trackback:ping><description><![CDATA[<p><strong>一，XML Schema<br />
</strong>1，定义：XML Schema 是基于XML 的DTD 替代者，用来描述 XML 文档的结构；</p>
2，优点：支持数据类型；使用 XML 语法；可保护数据通信；可扩展；<br />
3，简单类型：<br />
简易元素：简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。&lt;xs:element name="color" type="xs:string" default="red"/&gt;，确实，固定（fixed）；<br />
属性：属性均被作为简易类型来声明，&lt;xs:attribute name="xxx" type="yyy"/&gt;，use（required）；<br />
XSD 限定：用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet；<br />
4，复杂类型：<br />
复合元素：复合元素指包含其他元素及/或属性的 XML 元素；空元素 ，包含其他元素的元素 ，仅包含文本的元素 ，包含元素和文本的元素；<br />
指示器：通过指示器，我们可以元素在文档中被使用的方式。<br />
Order 指示器：All ，Choice ，Sequence ；<br />
Occurrence 指示器：maxOccurs ，minOccurs ；<br />
Group 指示器：Group name ，attributeGroup name ；<br />
Group 指示器；<br />
&lt;anyAttribute&gt; 元素使我们有能力通过未被 schema 规定的属性来扩展 XML 文档；<br />
&lt;any&gt; 元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档；<br />
<strong>二，DTD：</strong><br />
DTD（文档类型定义）的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。<br />
元素，属性，实体，<br />
三，XML Schema 与 DTD 比较：<br />
<a href="http://www-128.ibm.com/developerworks/cn/xml/x-sd/index.html">http://www-128.ibm.com/developerworks/cn/xml/x-sd/index.html</a>
<img src ="http://www.blogjava.net/Rookie/aggbug/175277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-14 18:37 <a href="http://www.blogjava.net/Rookie/archive/2008/01/14/175277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(七) XSLT 例子</title><link>http://www.blogjava.net/Rookie/archive/2008/01/11/174716.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Fri, 11 Jan 2008 13:03:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/11/174716.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/174716.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/11/174716.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/174716.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/174716.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: xslt例子，用到了xslt的元素；xpath不知道怎么弄连接下载啊，只好把所有代码都贴上来了；可以把xsl文件里的注释去了看下效果；测试页面：cd.html&lt;html&gt;&lt;body&gt;&lt;script&nbsp;language="javascript"&gt;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Load&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/Rookie/archive/2008/01/11/174716.html'>阅读全文</a><img src ="http://www.blogjava.net/Rookie/aggbug/174716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-11 21:03 <a href="http://www.blogjava.net/Rookie/archive/2008/01/11/174716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(六) XSLT 基础</title><link>http://www.blogjava.net/Rookie/archive/2008/01/11/174714.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Fri, 11 Jan 2008 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/11/174714.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/174714.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/11/174714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/174714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/174714.html</trackback:ping><description><![CDATA[<strong style="font-family: 隶书">一，XSLT 简介:</strong>XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言。<br />
<p>XSLT 指 XSL 转换（XSL Transformations），<br />
XSLT 是 XSL 中最重要的部分，<br />
XSLT 可将一种 XML 文档转换为另外一种 XML 文档，<br />
XSLT 使用 XPath 在 XML 文档中进行导航，<br />
<strong>二，XSLT&nbsp; 元素</strong><br />
<span style="color: #ffff00"><span style="color: #3366ff">&lt;xsl:template&gt;</span> </span>元素：&lt;xsl:template&gt; 元素用于构建模板。match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式（举例，match="/" 定义整个文档）；<br />
<span style="color: #3366ff">&lt;xsl:value-of&gt;</span> 元素：&lt;xsl:value-of&gt; 元素用于提取某个选定节点的值，并把值添加到转换的输出流中<br />
<span style="color: #3366ff">&lt;xsl:for-each&gt; </span>元素：&lt;xsl:for-each&gt; 元素可用于选取某个指定节点集的每个 XML 元素；<br />
<span style="color: #3366ff">&lt;xsl:sort&gt; </span>元素：用于对结果进行排序；<br />
<span style="color: #3366ff">&lt;xsl:if&gt; </span>元素：用于放置针对 XML 文件内容的条件测试；<br />
<span style="color: #3366ff">&lt;xsl:choose&gt; </span>元素：用于结合 &lt;xsl:when&gt; 和 &lt;xsl:otherwise&gt; 来表达多重条件测试；<br />
<span style="color: #3366ff">&lt;xsl:apply-templates&gt; </span>元素：&lt;xsl:apply-templates&gt; 元素可把一个模板应用于当前的元素或者当前元素的子节点。假如我们向 &lt;xsl:apply-templates&gt; 元素添加一个 select 属性，此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序；</p>
<img src ="http://www.blogjava.net/Rookie/aggbug/174714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-11 20:48 <a href="http://www.blogjava.net/Rookie/archive/2008/01/11/174714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(五)  xPath例子</title><link>http://www.blogjava.net/Rookie/archive/2008/01/10/174399.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Thu, 10 Jan 2008 11:19:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/10/174399.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/174399.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/10/174399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/174399.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/174399.html</trackback:ping><description><![CDATA[xPathTest.html(测试页面)<br />
其中loadxmldoc.js和book.xml 和 <a title="XML 学习(三) DOM 解析- Node 对象的属性 " href="http://www.blogjava.net/Rookie/archive/2008/01/09/174115.html">XML 学习(三) DOM 解析- Node 对象的属性 </a>一篇中一样；<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&lt;</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">../loadxmldoc.js</span><span style="color: #000000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;xmlDoc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;loadXMLDoc(</span><span style="color: #000000">"</span><span style="color: #000000">../book/book.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">只有XML解析器的一个实例才能调用&nbsp;selectNodes（）&nbsp;？？？</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;x</span><span style="color: #000000">=</span><span style="color: #000000">xmlDoc.selectNodes(</span><span style="color: #000000">"</span><span style="color: #000000">/bookstore/book</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">bookstore元素下的所有book子元素</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("bookstore");//获得bookstore元素</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("book");//什么都没获得？？？？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes(".");//获得当前元素，</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("node()");//获得&nbsp;所有元素，包括文档声明；</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("//author");//获得文档中所有的author元素；</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("/bookstore/book[2]/author[2]");//bookstore第三个book子元素的第三个author元素</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("//@category");//获得有属性category的所有元素</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("/bookstore/book[last()]");//position()&lt;3&nbsp;报错&nbsp;函数不存在？？？</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("/bookstore/book[@category='WEB']/author");</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">bookstore的子元素中category属性为WEB的所有book元素的author元素</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("/bookstore/book/*");//bookstore子元素中book的所有子元素</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("//*");//获得文档元素</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">var&nbsp;x=xmlDoc.selectNodes("//title&nbsp;|&nbsp;//price");//所有的title元素和所有的price元素</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">x.length;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;xmp&gt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;x.item(i).xml&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;/xmp&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span></div>
<br />
其中主要用到了 xPath 语法和少量的运算符；<br />
关于坐标轴，函数测试都报错；
<img src ="http://www.blogjava.net/Rookie/aggbug/174399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-10 19:19 <a href="http://www.blogjava.net/Rookie/archive/2008/01/10/174399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(四)  xPath基础</title><link>http://www.blogjava.net/Rookie/archive/2008/01/10/174395.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Thu, 10 Jan 2008 10:57:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/10/174395.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/174395.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/10/174395.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/174395.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/174395.html</trackback:ping><description><![CDATA[<strong>一，简介：</strong>XPath 使用路径表达式来选取 XML 文档中的节点或者节点集，这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。XPath 使用路径表达式在 XML 文档中进行导航 ；XPath 包含一个标准函数库 ；XPath 是 XSLT 中的主要元素 。<br />
<strong>二，XPath 术语</strong><br />
节点（Node）：在 XPath 中，有七种类型的节点：元素、属性、文本、命名空间、处理指令、注释以及文档（根）节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
<p>基本值（或称原子值，Atomic value）：基本值是无父或无子的节点。<br />
项目（Item）：项目是基本值或者节点。<br />
<br />
<strong style="font-size: 12pt">节点关系<br />
</strong>父（Parent）：每个元素以及属性都有一个父，<br />
子（Children）：元素节点可有零个、一个或多个子，<br />
同胞（Sibling）：拥有相同的父的节点<br />
先辈（Ancestor）：某节点的父、父的父，等等，<br />
后代（Descendant）：某个节点的子，子的子，等等；</p>
<strong>三，XPath 语法</strong><br />
<p>XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的，<br />
nodename&nbsp;&nbsp; 选取此节点的所有子节点，<br />
/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从根节点选取 ，<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从匹配选择的当前节点选择文档中的节点，而不考虑它们的位置 ，<br />
.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选取当前节点 ，<br />
..&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选取当前节点的父节点 ，<br />
@&nbsp;&nbsp;&nbsp;&nbsp; 选取属性 ，</p>
<br />
谓语（Predicates）：谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。函数或者表达式；<br />
<br />
<p>选取未知节点：XPath 通配符可用来选取未知的 XML 元素。<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配任何元素节点 <br />
@* &nbsp;&nbsp;&nbsp;匹配任何属性节点 <br />
node() &nbsp;匹配任何类型的节点 </p>
<p>选取若干路径：通过在路径表达式中使用&#8220;|&#8221;运算符，您可以选取若干个路径。</p>
<p><strong>四，XPath Axes（坐标轴）：</strong>轴可定义某个相对于当前节点的节点集。</p>
<p>ancestor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选取当前节点的所有先辈（父、祖父等） <br />
ancestor-or-self &nbsp;选取当前节点的所有先辈（父、祖父等）以及当前节点本身 <br />
attribute &nbsp;&nbsp;&nbsp;&nbsp;选取当前节点的所有属性 <br />
child &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选取当前节点的所有子元素。 <br />
descendant &nbsp;&nbsp;&nbsp;&nbsp;选取当前节点的所有后代元素（子、孙等）。 <br />
descendant-or-self 选取当前节点的所有后代元素（子、孙等）以及当前节点本身。 <br />
following &nbsp;&nbsp;&nbsp;&nbsp;选取文档中当前节点的结束标签之后的所有节点。 <br />
namespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选取当前节点的所有命名空间节点 <br />
parent &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选取当前节点的父节点。 <br />
preceding &nbsp;&nbsp;&nbsp;&nbsp;选取文档中当前节点的开始标签之前的所有节点。 <br />
preceding-sibling 选取当前节点之前的所有同级节点。 <br />
self &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选取当前节点。 </p>
<p>步的语法： 轴名称::节点测试[谓语]</p>
<br />
<strong>五，XPath 运算符：</strong>XPath 表达式可返回节点集、字符串、逻辑值以及数字。<br />
加(+)，减(-)，乘(*)，除(div)，等于(=)，不等于(!=)，大于(&gt;)，小于(&lt;)，大于等于(&gt;=)，小于等于(&lt;=)，与(and)，或(or)，余(mod)，
<img src ="http://www.blogjava.net/Rookie/aggbug/174395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-10 18:57 <a href="http://www.blogjava.net/Rookie/archive/2008/01/10/174395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(三)  DOM 解析- Node 对象的属性</title><link>http://www.blogjava.net/Rookie/archive/2008/01/09/174115.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Wed, 09 Jan 2008 13:05:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/09/174115.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/174115.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/09/174115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/174115.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/174115.html</trackback:ping><description><![CDATA[下午在<a title="万维网联盟(W3C)" href="http://www.w3schools.com/dom/dom_nodetype.asp">W3C</a>看了半天XML DOM 教程，弄了个例子，整理下；(<a title="W3C" href="http://www.w3schools.com/dom/dom_nodetype.asp">W3C</a>上有所有的网站建设教程，有一个对应的中文网站<a href="http://www.w3school.com.cn/index.html">http://www.w3school.com.cn/index.html</a>，不过有些例子的连接打不开)<br />
<strong style="color: red">loadxmldoc.js</strong>，只有一个函数loadXMLDoc(dname)，单数为解析XML文件名，返回一个XMLDOM对象；
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">function&nbsp;loadXMLDoc(dname)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xmlDoc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;code&nbsp;for&nbsp;IE</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(window.ActiveXObject)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ActiveXObject(</span><span style="color: #000000">"</span><span style="color: #000000">Microsoft.XMLDOM</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;code&nbsp;for&nbsp;Mozilla,&nbsp;Firefox,&nbsp;Opera,&nbsp;etc.</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(document.implementation&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;document.implementation.createDocument)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc</span><span style="color: #000000">=</span><span style="color: #000000">document.implementation.createDocument(</span><span style="color: #000000">""</span><span style="color: #000000">,</span><span style="color: #000000">""</span><span style="color: #000000">,</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">'</span><span style="color: #000000">Your&nbsp;browser&nbsp;cannot&nbsp;handle&nbsp;this&nbsp;script</span><span style="color: #000000">'</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc.async</span><span style="color: #000000">=</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc.load(dname);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">(xmlDoc);<br />
}</span></div>
<strong style="color: red">book.xml</strong>待解析XML文件<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">ISO-8859-1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">?&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;&nbsp;Edited&nbsp;with&nbsp;XML&nbsp;Spy&nbsp;v2007&nbsp;(http:</span><span style="color: #008000">//</span><span style="color: #008000">www.altova.com)&nbsp;--&gt;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">bookstore</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">book&nbsp;category</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">COOKING</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">title&nbsp;lang</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">en</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">Everyday&nbsp;Italian</span><span style="color: #000000">&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">Giada&nbsp;De&nbsp;Laurentiis</span><span style="color: #000000">&lt;/</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">year</span><span style="color: #000000">&gt;</span><span style="color: #000000">2005</span><span style="color: #000000">&lt;/</span><span style="color: #000000">year</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">price</span><span style="color: #000000">&gt;</span><span style="color: #000000">30.00</span><span style="color: #000000">&lt;/</span><span style="color: #000000">price</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">book</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">book&nbsp;category</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">CHILDREN</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">title&nbsp;lang</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">en</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">Harry&nbsp;Potter</span><span style="color: #000000">&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">J&nbsp;K.&nbsp;Rowling</span><span style="color: #000000">&lt;/</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">year</span><span style="color: #000000">&gt;</span><span style="color: #000000">2005</span><span style="color: #000000">&lt;/</span><span style="color: #000000">year</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">price</span><span style="color: #000000">&gt;</span><span style="color: #000000">29.99</span><span style="color: #000000">&lt;/</span><span style="color: #000000">price</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">book</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">book&nbsp;category</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">WEB</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">title&nbsp;lang</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">en</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">XQuery&nbsp;Kick&nbsp;Start</span><span style="color: #000000">&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">James&nbsp;McGovern</span><span style="color: #000000">&lt;/</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">Per&nbsp;Bothner</span><span style="color: #000000">&lt;/</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">Kurt&nbsp;Cagle</span><span style="color: #000000">&lt;/</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">James&nbsp;Linn</span><span style="color: #000000">&lt;/</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">Vaidyanathan&nbsp;Nagarajan</span><span style="color: #000000">&lt;/</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">year</span><span style="color: #000000">&gt;</span><span style="color: #000000">2003</span><span style="color: #000000">&lt;/</span><span style="color: #000000">year</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">price</span><span style="color: #000000">&gt;</span><span style="color: #000000">49.99</span><span style="color: #000000">&lt;/</span><span style="color: #000000">price</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">book</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">book&nbsp;category</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">WEB</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">title&nbsp;lang</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">en</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">Learning&nbsp;XML</span><span style="color: #000000">&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">Erik&nbsp;T.&nbsp;Ray</span><span style="color: #000000">&lt;/</span><span style="color: #000000">author</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">year</span><span style="color: #000000">&gt;</span><span style="color: #000000">2003</span><span style="color: #000000">&lt;/</span><span style="color: #000000">year</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">price</span><span style="color: #000000">&gt;</span><span style="color: #000000">39.95</span><span style="color: #000000">&lt;/</span><span style="color: #000000">price</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">book</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bookstore</span><span style="color: #000000">&gt;</span></div>
<span style="color: red"><strong>book.html&nbsp;</strong></span> 测试页面<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&lt;</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">../loadxmldoc.js</span><span style="color: #000000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;xmlDoc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;loadXMLDoc(</span><span style="color: #000000">"</span><span style="color: #000000">book.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;getFirstChild(doc){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;doc.firstChild;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(x.nodeType</span><span style="color: #000000">!=</span><span style="color: #000000">1</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.nextSibling;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;getLastChild(doc){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;doc.lastChild;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(x.nodeType</span><span style="color: #000000">!=</span><span style="color: #000000">1</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.previousSibling;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;first&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getFirstChild(xmlDoc.documentElement);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">first.nodeName:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;first.nodeName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">first.nodeType:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;first.nodeType&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;last&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getLastChild(xmlDoc.documentElement);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">last.nodeName:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;last.nodeName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">last.nodeType:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;last.nodeType&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;test&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.getElementsByTagName(</span><span style="color: #000000">"</span><span style="color: #000000">title</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;parent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;test.item(</span><span style="color: #000000">0</span><span style="color: #000000">).parentNode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">parent.nodeName:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;parent.nodeName&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">textContent:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;parent.textContent&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">text:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;parent.text&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(</span><span style="color: #000000">"</span><span style="color: #000000">xml:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;xmp&gt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;parent.xml&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;/xmp&gt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(xmlDoc.nodeName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(xmlDoc.nodeType&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(xmlDoc.childNodes[</span><span style="color: #000000">0</span><span style="color: #000000">].nodeValue&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.documentElement;</span><span style="color: #008000">//</span><span style="color: #008000">获得xml文件文档元素，即bookstore</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(x.nodeName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(x.nodeType&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(x.childNodes.item(</span><span style="color: #000000">0</span><span style="color: #000000">).nodeValue&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;child&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;x.childNodes;</span><span style="color: #008000">//</span><span style="color: #008000">获得&nbsp;bookstore所有的子元素&nbsp;book</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">显示bookstore所有元素</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;child.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(child[i].nodeName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(child[i].nodeType&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(child[i].childNodes[</span><span style="color: #000000">0</span><span style="color: #000000">].nodeValue&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;ch&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;child[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(j</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;j</span><span style="color: #000000">&lt;</span><span style="color: #000000">ch.childNodes.length;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(ch.childNodes[j].nodeName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(ch.childNodes[j].nodeType&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(ch.childNodes[j].childNodes[</span><span style="color: #000000">0</span><span style="color: #000000">].nodeValue&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span></div>
<br />
其中用到的XML DOM - Node 对象的属性有：<br />
<span style="color: #33cccc; background-color: #ffffff">childNodes</span>:返回某节点到子节点的节点列表<br />
<span style="color: #33cccc; background-color: #ffffff">firstChild</span>:返回某节点的首个子节点<br />
<span style="color: #33cccc">lastChild</span>:返回某个节点的最后一个子节点<br />
<span style="color: #33cccc">nextSibling</span>:返回某个节点之后紧跟的同级节点<br />
<span style="color: #33cccc">nodeName</span>:返回节点的名称，根据其类型<br />
<span style="color: #33cccc">nodeType</span>:返回节点的类型<br />
<span style="color: #33cccc">nodeValue</span>:设置或返回某个节点的值，根据其类型<br />
<span style="color: #33cccc">ownerDocument</span>:返回某个节点的根元素（document 对象）<br />
<span style="color: #33cccc">parentNode</span>:返回某节点的父节点<br />
<span style="color: #33cccc">previousSibling</span>:返回某个节点之前紧跟的同级节点<br />
<span style="color: #33cccc">textContent</span>:设置或返回某节点及其后代的文本内容<br />
<span style="color: #33cccc">text</span>:返回某节点及其后代的文本（IE 独有的属性）<br />
<span style="color: #33cccc">xml</span>:返回某节点及其后代的 XML（IE 独有的属性） <br />
<br />
<span style="color: red">未测试或者不太明白的XML DOM - Node 对象的属性有，谁帮忙讲解下啊；</span><br />
<span style="color: #ff0000">baseURI</span>:返回某个节点的绝对基准<br />
<span style="color: #ff0000">prefix</span>:设置或返回某节点的命名空间前缀<br />
<span style="color: #ff0000">localName</span>:返回某个节点的本地名称<br />
<span style="color: #ff0000">namespaceURI</span>:返回某个节点的命名空间<br />
<img src ="http://www.blogjava.net/Rookie/aggbug/174115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-09 21:05 <a href="http://www.blogjava.net/Rookie/archive/2008/01/09/174115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(二)  DOM 解析 standalone 的问题</title><link>http://www.blogjava.net/Rookie/archive/2008/01/09/174093.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Wed, 09 Jan 2008 12:05:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/09/174093.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/174093.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/09/174093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/174093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/174093.html</trackback:ping><description><![CDATA[<p>一个简单的 XML解析例子，弄了半天终于可以运行了，记下来；还有点问题，大家帮忙看看；<br />
<br />
<strong>文档类型定义(myfile.dtd)</strong><br />
&lt;!ELEMENT myfile (title, author)&gt;<br />
&lt;!ELEMENT title (#PCDATA)&gt;<br />
&lt;!ELEMENT author (#PCDATA)&gt;<br />
<br />
<strong>XML文件(myfile.xml)<br />
</strong>&lt;?xml version="1.0" encoding="GB2312"?&gt;<br />
&lt;!DOCTYPE myfile SYSTEM "myfile.dtd"&gt;<br />
&lt;myfile&gt;<br />
&lt;title&gt;XML轻松学习手册&lt;/title&gt;<br />
&lt;author&gt;ajie&lt;/author&gt;<br />
&lt;/myfile&gt;<br />
<br />
<strong>测试页面(myfile.html)</strong><br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;script language="JavaScript" for="window" event="onload"&gt;<br />
&nbsp;var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");<br />
&nbsp;xmlDoc.async="false";<br />
&nbsp;xmlDoc.load("myfile.xml");<br />
&nbsp;nodes = xmlDoc.documentElement.childNodes;<br />
&nbsp;title.innerText = nodes.item(0).text;<br />
&nbsp;author.innerText = nodes.item(1).text;<br />
&lt;/script&gt;</p>
<p>&lt;title&gt;在HTML中调用XML数据&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body bgcolor="#FFFFFF"&gt;<br />
&lt;b&gt;标题: &lt;/b&gt;<br />
&lt;span id="title"&gt;&lt;/span&gt;&lt;br&gt;<br />
&lt;b&gt;作者: &lt;/b&gt;<br />
&lt;span id="author"&gt;&lt;/span&gt;&lt;br&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
<strong style="color: red">问题：<br />
1，</strong><br />
&lt;?xml version="1.0" standalone="yes" encoding="GB2312"?&gt;<br />
&lt;myfile&gt;<br />
&lt;title&gt;XML轻松学习手册&lt;/title&gt;<br />
&lt;author&gt;ajie&lt;/author&gt;<br />
&lt;/myfile&gt;<br />
把myfile.html改成这样时，到这句nodes = xmlDoc.documentElement.childNodes时报错，提示&#8220;缺少对象&#8221;;<br />
<span style="color: red"><strong>2，</strong></span>standalone="yes"换成standalone="no"一样的错误<br />
<span style="color: red"><strong>3，</strong></span><br />
&lt;?xml version="1.0"&nbsp; encoding="GB2312"?&gt;<br />
&lt;myfile&gt;<br />
&lt;title&gt;XML轻松学习手册&lt;/title&gt;<br />
&lt;author&gt;ajie&lt;/author&gt;<br />
&lt;/myfile&gt;<br />
把myfile.html改成这样时可以运行正常；<br />
<br />
对这个standalone很是无奈，谁帮忙讲解下；</p>
  <img src ="http://www.blogjava.net/Rookie/aggbug/174093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-09 20:05 <a href="http://www.blogjava.net/Rookie/archive/2008/01/09/174093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 学习(一) XML基础</title><link>http://www.blogjava.net/Rookie/archive/2008/01/09/174085.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Wed, 09 Jan 2008 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/09/174085.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/174085.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/09/174085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/174085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/174085.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义：XML是Extensible Markup Language的简写，一种扩展性标识语言；<strong style="color: red">是数据储存和交互的工具</strong>，<br />
<br />
一，相关术语：<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">Element</span>(元素)：一个元素由一个标识来定义，包括开始和结束标识以及其中的内容，就象这样：&lt;author&gt;ajie&lt;/author&gt; ；<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">Tag</span>(标识)：标识是用来定义元素的。在XML中，标识必须成对出现，将数据包围在中间。标识的名称和元素的名称是一样的；<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">Attribute</span>(属性)：属性是对标识进一步的描述和说明，一个标识可以有多个属性，例如font的属性还有size；<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">Declaration</span>(声明) ：在所有XML文档的第一行都有一个XML声明。这个声明表示这个文档是一个XML文档，它遵循的是哪个XML版本的规范。一个XML的声明语句就象这样：&lt;?xml version="1.0"?&gt; ；<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">DTD</span>(文件类型定义) ：DTD是用来定义XML文档中元素，属性以及元素之间关系的；（XML文档结构）<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">Well-formed XML</span>(良好格式的XML)：一个遵守XML语法规则，并遵守XML规范的文档称之为"良好格式"；<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">Valid XML</span>(有效的XML)：一个遵守XML语法规则，并遵守相应DTD文件规范的XML文档称为有效XML文档；<br />
二，XML文档组成：<br />
&nbsp;&nbsp;&nbsp;&nbsp;文档声明：&lt;?xml version="1.0" encoding="GB2312"?&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;文档类型定义（DTD）<br />
&nbsp;&nbsp;&nbsp;&nbsp;XML标示创建内容<br />
三，XML语法规则<br />
1，声明语句&lt;?xml ... ?&gt;的作用是告诉浏览器或其它处理程序这个文档是XML文档。声明语句中的version表示文档遵守的XML规范的版本,encoding表示文档所用的语言编码，这个例子用的编码是&#8221;GB2312&#8220;；<br />
2，注意大小写的区分；<br />
3，&#8220;有始有终&#8221;所有的标识必须有相应的结束标识；<br />
4，空标识(empty element)必须被关闭；<br />
5，给属性值加引号，HTML中的属性值可以加"",也可以不加"",还可以加''。但在XML中，属性值一定要加"；<br />
6，标识之间不可以交叉；<br />
<br />
XML标记必须遵循下面的命名规则:<br />
1，名字中可以包含字母、数字以及其它字母； <br />
2，名字不能以数字或"_" (下划线) 开头；<br />
3，名字不能以字母 xml (或 XML 或 Xml ..) 开头；<br />
4，名字中不能包含空格。 <br />
5，名称中间不能包含":"(冒号)&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;为了使元素更容易阅读理解和操作，我们还有一些建议：&nbsp;名称中不要使用"."，名称尽量简短，名称的大小写尽量采用同一标准，名称可以使用非英文字符，比如用中文。但是有些软件可能不支持。(IE5目前是支持中文元素的) <br />
四, DOM<br />
&nbsp;&nbsp;&nbsp;&nbsp;DOM全称是document object model(文档对象模型)，DOM是用来干什么的呢？假设把你的文档看成一个单独的对象，DOM就是如何用HTML或者XML对这个对象进行操作和控制的标准。<br />
&nbsp;&nbsp;&nbsp;&nbsp;面向对象的思想方法已经非常流行了，在编程语言(例如java，js)中，都运用面向对象的编程思想。在XML中，就是要将网页也作为一个对象来操作和控制，我们可以建立自己的对象和模板。与对象进行交流，如何命令对象，就要用到API。API全称Application Programming Interface，它是访问和操作对象的规则。而DOM就是一种详细描述HTML/XML文档对象规则的API。它规定了HTML/XML文档对象的命名协定，程序模型，沟通规则等。在XML文档中，我们可以将每一个标识元素看作一个对象---它有自己的名称和属性。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;XML创建了标识，而DOM的作用就是告诉script如何在浏览器窗口中操作和显示这些标识;<br />
&nbsp;&nbsp;&nbsp;上面我们已经简要的讲述了一些XML的基本原理，我们来看看它们之间的关联以及它们是如何工作的，先看这里一张图： <br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/rookie/DOM.gif" border="0" /><br />
1.XML描述数据类型。例如:"King lear"是一个标题元素； <br />
2.CSS储存并控制元素的显示样式。例如：标题将被以18pt字体显示 <br />
3.script脚本控制元素如何动作。例如：当一个title元素"out of stock"，将被用红色显示。 <br />
4.DOM则为脚本和对象的交流提供一个公共平台，并将结果显示在浏览器窗口。<br />
如果任何一个部分发生错误，都不会得到正确结果。 <br />
<br />
五，显示<br />
&nbsp;&nbsp;&nbsp;&nbsp;单独用XMl不能显示页面，我们使用格式化技术，比如CSS或者XSL，才能显示XML标记创建的文档；XML中用来设定显示风格样式的文件类型有：<br />
1，XSL ：XSL全称是Extensible Stylesheet Language(可扩展样式语言), 是将来设计XML文档显示样式的主要文件类型。它本身也是基于XML语言的。使用XSL，你可以灵活的设置文档显示样式，文档将自动适应任何浏览器和PDA(掌上电脑)。；XSL也可以将XML转化为HTML，那样，老的浏览器也可以浏览XML文档了。 <br />
2，CSS：CSS大家很熟悉了，全称是Cascading Style Sheets(层叠样式表)，是目前用来在浏览器上显示XML文档的主要方法。<br />
3.Behaviors ：Behaviors现在还没有成为标准。它是微软的IE浏览器特有的功能，用它可以对XML标识设定一些有趣动作。 </p>
 <img src ="http://www.blogjava.net/Rookie/aggbug/174085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-09 18:56 <a href="http://www.blogjava.net/Rookie/archive/2008/01/09/174085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于提高自己JAVA水平的十大技术讨论(转)</title><link>http://www.blogjava.net/Rookie/archive/2008/01/08/173709.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Tue, 08 Jan 2008 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/08/173709.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/173709.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/08/173709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/173709.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/173709.html</trackback:ping><description><![CDATA[本文列出了当今计算机软件开发和应用领域最重要十种关键技术排名，如果你想保证你现在以及未来的几年不失业，那么你最好跟上这些技术的发展。虽然你不必对这十种技术样样精通，但至少应该对它们非常熟悉。
<p>　<strong>　一、XML</strong></p>
<p>　　在十种技术中，最重要的一种技术我想应该非XML莫属。这里不仅仅指XML规范本身，还包括一系列有关的基于XML的语言：主要有XHTML，XSLT，XSL，DTDs，XML Schema(XSD)，XPath，XQuery和SOAP.如果你现在还对XML一无所知，那么赶快狂补吧。XML是包含类似于HTML标签的一个文本文件，在这个文件中定义了一个树型结构来描述它所保存的数据。</p>
<p>　　XML最大的优点是你既可以在这个文本文件中存储结构化数据，也可以在其中存储非结构化数据——也就是说，它能包含和描述"粗糙的"文档数据，就象它描述"规则的"表格数据一样。</p>
<p>　　XHTML是目前编写HTML的首选方法;因为XHTML本身就是格式良好的XML，与通常畸形的HTML文档相比， XHTML格式文档更容易处理。</p>
<p>　　XSLT和XSL是对XML文档进行转换的语言。它们可以将XML文档转换成各种格式，比如另一个文本文件、PDF文件、HTML文件、逗号分割的文件，或者转换成其它的XML文档。</p>
<p>　　DTDs 和XML Schema用来描述XML文件所包含的数据内容的类型，使你不用编写定制的代码就能对XML文档的内容进行"有效性"检查，使内容强行遵守给出的规则。</p>
<p>　　XPath 和 XQuery是查询语言，用它们可以从XML文档中吸取单个的数据项或者数据项列表。XQuery的功能特别强大，因为它对XPath查询进行了扩展。实际上，XQuery和XML的关系就像SQL之于关系数据库一样。</p>
<p>　　SOAP是Web services间进行通讯的标准协议。你不必知道SOAP协议的所有细节，但是你应该熟悉其常用规则及其工作原理，这样你才能使用它。</p>
<p>　<strong>　二、Web Services</strong></p>
<p>　　Web服务是XML流行后的直接产物。因为XML可以描述数据和对象，XML大纲可以保证XML文档数据的有效性，因为XML的基于文本的规范，因而XML文档极其适合于作为一种跨平台通讯标准的基本格式。如果你还没有接触过Web服务，那么过不了多久你肯定会碰到它，所以必须熟练掌握Web服务，最好是精通它，因为它是迄今为止应用程序间跨不同种类机器、语言、平台和位置通讯的最简单的一种方式。不管你需不需要它，Web服务都会是将来互用性的主要趋势。</p>
<p>　　XML工作组的John Bosak曾说过："XML使得Java有事可做"，那么，我们也可以说，Web服务使得所有语言都有事可做。Web服务让运行在大型机上的COBOL应用程序与运行在手持设备上的应用程序相互沟通;让Java小应用与。NET服务器相互通讯，让桌面应用与Web服务器进行无缝交互，不但为商业数据处理，同时也为商业功能提供了方便的实现——并且这种实现与语言、平台、和位置无关。</p>
<p>　　<strong>三、面向对象编程</strong></p>
<p>　　许多程序员仍然认为OOP乃技术的象牙之塔，但是细细想一下过去十年里在面向对象领域里占据过统治地位的开发语言之后，你就不会这么认为了，OOP理念从Smalltalk开始，然后蔓延到C++和Pascal(Delphi)，到Java成为真正的主流，几年之后，VB.NET 和 C#的出现可以说是OOP发展到了登峰造极的地步。虽然使用这些语言不必了解OOP的概念，但如果你缺乏一些OOP的基本知识和方法，我想你很难在逐渐疲软的就业市场中找到工作。</p>
<p><strong>　四、Java， C++， C#， VB.NET</strong> </p>
<p>　　如果你热衷于技术，并且热爱编程，那么我想你应该轻松玩转这些高级语言，我说的玩转并不一定要你成为超级编程高手。而是能看懂用这些语言编写的代码即可。如果你还有精力用它们编码那就更好了。其实这种机会甚少。但是看代码的机会很多，学习编程的最有效的一种方式就是看源代码——浩如烟海的源代码中很多都不是用你所钟爱的开发语言编写的。</p>
<p>　　在过去的几年里，各个语言功能的发展基本上都差不多。现在你完全可以用VB.NET来写Windows服务、Web应用或者命令行程序。即使你只用其中的一种语言写程序。我认为也完全有必要学习另外一种语言，使自己能阅读和理解它们现有的例子代码，并且能将一种语言编写的代码转换成你首选的编程语言代码。这里列出的四种语言可谓是一个强大的开发语言工具箱，如果你掌握了它们，毫无疑问你一定是一个众人仰慕的高手。这里我要声明一下：那就是我并没有要忽略和排除其它的高级语言，如：FORTRAN、COBOL、APL、ADA、Perl和Lisp等等，根据你所从事的领域不同，应该选择适合的语言和工具。</p>
<p>　　<strong>五、JavaScript</strong></p>
<p>　　Java 和JavaScript两者的名字尽管很类似，但它们之间并没有什么关系。为什么一种脚本语言会如此重要，以至于将它列入十种关键技术之一呢?仔细想一下就知道了，目前所有主流的浏览器都使用JavaScript.如果你要编写Web应用程序，那么JavaScript不可或缺。此外，JavaScript还能作为一种服务器端的脚本语言，如将它嵌入在ASP、ASP.NET中，或者嵌入XSLT来扩展功能。目前JavaScript在Mozilla/Netscape中是激活基于XUL界面的首选语言，它派生出了ActionScript，成为Flash MX应用的编程语言。还有就是JavaScript极有可能成为未来新设备的脚本语言以及主流应用的宏语言。</p>
<p>　　相比之下，VBScript虽然在微软的产品中得到很好的支持，但从长远来看，没有迹象表明它会有美好前途。微软自己都趋向于用JavaScript(或者用由JavaScript派生的JScript)来编写其客户端脚本代码。因此，如果你要选择脚本语言，非JavaScript莫属。</p>
<p>　<strong>　六、Regular Expressions</strong></p>
<p>　　从所周知，关系数据库的查询使用SQL，搜索XML文档用XPath 和XQuery，而正则表达式则用来搜索纯文本。例如，你可以用一个命令来查找或删除HTML格式文件中的注释内容。大家都用过"IndexOf"、"InStr"以及"Like"这些内建在JavaScript或VB中的文本搜索函数，这些函数虽然很容易使用，但是它们的功能却无法与正则表达式同日而语——现在每一种主流的开发语言都提供对正则表达式的存取。尽管有人认为正则表达式本身的读写艰涩难懂，但毕竟它的功能强大，使用它的领域也越来越多。</p>
<p>　　<strong>七、Design Patterns</strong></p>
<p>　　就像OOP通过创建和分类对象来简化编程一样，设计模式将普通的对象交互分类成指定的模型，这是一个从一般到具体的过程。OOP的成分使用得越多，设计模式就显得越有用武之地。所以你必须理解它们，跟上其总体理论的发展。</p>
<p>　<strong>　八、Flash MX</strong></p>
<p>　　当你需要比HTML和CSS所能提供的更多的客户端图形和编程能力时，Flash是最佳选择。在Flash中编程比用Java小应用或者。NET代码来得快得多，也容易得多。</p>
<p>　　在最新版本中(MX)，Flash不仅可以画图和进行动画打包，它还是个高度的可编程应用环境。具备强大的与SOAP Web服务沟通的能力，可以调用运行在远端服务器上的ColdFusion、Java或。NET代码。可以说Flash几乎无处不在，包括手持设备、置顶盒、甚至是新的平板电脑，你到处都可以见到它的身影，所以使用它实际上可以扩展和延伸你的应用程序使用领域。</p>
<p><strong>　九、Linux/Windows</strong> </p>
<p>　　这是当今PCs机操作系统的两大阵容，如果你想在计算机行业里混，就一定要熟悉它们。对于Linux，最好能自己安装，配置，下载它的图形用户界面以及一些应用程序。自己安装Apache并会编写Web应用程序。要清醒地认识到这个世界除了Windows之外，还有Linux的存在。并且这种局面将会长期存在。反过来，如果你是一个死忠的Linux开发者，不要再继续对Windows的憎恶，要相互学习，取长补短，看看Windows有什么好的东东可以采纳。记住Windows仍然是桌面之王。</p>
<p>　　谁也说不准你们公司什么时候会决定从Linux转向Windows，或者从Windows转向Linux.谁也说不准什么时候你会跳槽跑到另外一个使用不同平台的公司上班——或者即便不跳槽，也有可能在不同平台上开始另外一个杀手级项目——所以最好在每个平台上都积累一些经验，而不要在一棵树上吊死。</p>
<p><strong>　　十、SQL</strong></p>
<p>　　尽管SQL在当今众多的技术中已不是什么新东西，而且在未来的十年里它的作用很有可能被削弱，甚至整个被淘汰，但它仍然是一种基本技能——别看它是一种基本技能，至今仍有许多开发人员不懂什么是SQL或对它了解不多。不要指望基于图形用户界面的SQL构造器会帮你的忙，还是自己亲手写SQL查询吧，确定你掌握了SQL的基本语法。现在理解了SQL，不仅对以后学习XQuery有所裨益，而且可以使你很快找到简化或改进当前开发项目的途径。</p>
<p>　　<strong>尾声：培养对技术的好奇心</strong></p>
<p>　　其实，不管技术的发展趋势如何，每个人最重要的一个技能是好奇心。敢于面对挑战，在你目前或未来的工作中，新语言或新技术可能很重要，也可能不怎么重要，你所学习的东西并不一定非要针对你的工作。不要怕失败，任何新的技术对初学者来说都是困难的。大多数的失败都可以归咎于本身急功近利，希望速成。俗话说——千里之行，始于足下，应该脚踏实地，一步一个脚印地往前走。不要让时间来左右你行动，而是要利用时间来关注、研究、测试新的开发技术和工具。</p>
<img src ="http://www.blogjava.net/Rookie/aggbug/173709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-08 17:45 <a href="http://www.blogjava.net/Rookie/archive/2008/01/08/173709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGIS 介绍(转)</title><link>http://www.blogjava.net/Rookie/archive/2008/01/08/173615.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Tue, 08 Jan 2008 05:36:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/08/173615.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/173615.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/08/173615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/173615.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/173615.html</trackback:ping><description><![CDATA[<span style="color: #000000">最近在看 Geoserver ，这篇文章不错，转过来；<br />
<span class="title"><br />
此FOSS4G大会即将召开之日，最近我会在Blog上依次介绍一些OpenGIS标准、架构及用于实现的软件。一方面给初涉此行的朋友一个快速入门的概览，另一方面也是对我接触OpenGIS近一年来的总结。<br />
<br />
<a href="http://www.yupoo.com/photos/view?id=ff808081151b70c901151db4a91a4084" target="_blank"></a><img height="500" alt="" src="http://www.blogjava.net/images/blogjava_net/rookie/opengis.jpg" width="500" border="0" /><br />
<br />
OpenGIS定义了一组基于数据的服务，而数据的基础是要素（Feature）。所谓要素简单地说就是一个独立的对象，在地图中可能表现为一个多边形建筑物，在数据库中即一个独立的条目。要素具有两个必要的组成部分，几何信息和属性信息。OpenGIS将几何信息分为点、边缘、面和几何集合四种：其中我们熟悉的线（Linestring）属于边缘的一个子类，而多边形（Polygon）是面的一个子类。也就是说OpenGIS定义的几何类型并不仅仅是我们常见的点、线、多边形三种，它提供了更复杂更详细的定义，增强了未来的可扩展性。另外，几何类型的设计中采用了组合模式（Composite），将几何集合（GeometryCollection）也定义为一种几何类型，类似地，要素集合（FeatureCollection）也是一种要素。属性信息没有做太大的限制，可以在实际应用中结合具体的实现进行设置。<br />
<br />
相同的几何类型、属性类型的组合成为要素类型（FeatureType），要素类型相同的要素可以被存放在一个数据源中。而一个数据源只能拥有一个要素类型。因此，可以用要素类型来描述一组属性相似的要素。在面向对象的模型中，完全可以把要素类型理解为一个类，而要素则是类的实例。<br />
<br />
通过GIS中间件可以从数据源中取出数据，供WMS服务器和WFS服务器使用。<br />
WMS服务器接收请求，根据请求内容的不同，可以返回不同格式的最终数据。例如，WMS可以返回常用图片格式的地图片段供最终用户阅读（类似Google Maps），其中地图是根据一个样式文件（SLD）生成的，它描述了地图的线划粗细，色彩等；WMS也可以返回GeoRSS和KML用来和其它地图服务互通。<br />
WFS服务器也可以接收请求，但WFS将返回GML格式的地理信息数据。GML是一种基于XML的数据格式，它可以完整的再现数据，也是OpenGIS数据源的重要形式。也就是说，WFS返回的GML可以继续作为数据源。在WFS请求中，OpenGIS定义了一个Filter标准，用来实现对数据的筛选，使WFS更加灵活。另一方面，WFS还支持通过WFS-t提交客户端对数据的修改。通俗地说，WMS是&#8220;只读&#8221;的，而WFS则是可以读写的。<br />
<br />
草草说完，发现自己的理解也十分有限，如有谬误，还望读者不吝指正。另外还有WCS方面不曾涉及，要获得更进一步的了解，请下载OpenGIS的标准进行阅读。 <br />
<br />
<br />
<br />
今天来说OpenGIS架构的软件、类库实现情况。OpenGIS是一个开放标准，不过它已经不仅仅在开源世界发挥作用，许多商业软件也支持了OpenGIS的标准。当然，这里所提到的软件全部都是开源软件。<br />
<br />
<strong>几何基础类库</strong><br />
代表： JTS（Java）， GEOS（C++）， Shapely（Python）<br />
这类几何基础类库主要实现的是OpenGIS的Simple Feature Access标准，简单地说他们就是对几何类型（Geometry）进行了一定程度的封装。以JTS为例，它按照OpenGIS对于Geometry的描述实现了基于Java的接口和继承关系，制作好了可以使用的类似Point、LineString这样的类。另外这些类库还普遍实现了OpenGIS的DE-9IM空间位置关系判断和一些常用的计算几何方法（如缓冲（buffer））。<br />
此类软件是所有GIS类库的基础，正如几何是GIS的基础之一一样。<br />
<br />
<strong>数据源实现</strong><br />
代表：PostGIS（PostgreSQL），MySQL Spatial<br />
数据源的实现主要是开源数据库的空间扩展。数据库的空间扩展不仅仅在数据表中支持几何类型的存储，而且更提供了SQL级别的集合关系判断，例如，可以直接利用SQL查询在某个多边形内的点。<br />
<br />
<strong>中间件</strong><br />
代表：GeoTools（Java）<br />
中间件在系统中扮演连接数据和服务的角色。GeoTools承担了从各种数据源（如PostGIS，GML，Shapefile，WFS）读取数据并将数据标准化的工作。Feature接口就定义在GeoTools中，不同数据源的数据读出后被统一成包含一个Geometry成员（定义在JTS中）的Feature接口的实现。这样，进一步的操作只需面向Feature即可，省去了高层软件对于不同数据源的解读过程。另外，GeoTools还是OpenGIS标准的全面实现，其中包括Filter、坐标转换、GML。<br />
<br />
<strong>WMS/WFS服务器</strong><br />
代表： GeoServer（Java），MapServer（PHP）<br />
地图服务器扮演向网络中的客户端提供地图服务的角色。这类地图服务器可以接收统一规范的WMS和WFS请求（request），返回多种格式的数据。这个过程有WMS/WFS规范的严格规定，所以，对客户端来说其地图服务器的实现究竟是什么并不会造成太大影响。这样的规范，为公共的、联合的地图服务创造了可能。<br />
<br />
<strong>客户端</strong><br />
代表：OpenLayers/MapBuilder（JavaScript），uDig（Java），QGIS（C++）<br />
客户端分为浏览器和桌面客户端程序两种。以OpenLayers为代表的B/S系统客户端现在已经非常强大，它可以封装WMS请求，在浏览器上实现地图的切片载入功能。另外拖动、缩放都功能也非常完善，可以实现跨浏览器操作。最近的OpenLayers版本还支持了矢量编辑功能，可以通过WFS-t提交。而传统的桌面客户端程序功能则更加强大，支持多种包括WMS和WFS在内的数据源，另外编辑功能、操作性也要比浏览器中的强大。<br />
<br />
<br />
<strong>Shapefile<br />
</strong>ESRI的Shapefile格式是GIS矢量文件格式的事实标准，通常由.shp, .shx, .prj, .dbf等文件组成。OpenGIS的实现软件普遍支持Shapefile的读写。Shapefile在GeoServer中可以直接作为数据源，但是这种方式并不被推荐，原因很简单，基于文件的数据源可能造成性能不佳和数据丢失。<br />
<br />
<strong>GML</strong><br />
GML是OpenGIS的标准规范之一，它基于xml描述地理数据。于Shapefile相比，xml更容易读写，易于在网络中以各种形式传播。同时，xml还具有可读性，人可以理解和辨识。GeoTools实现了GMLDataStore，因此在GeoServer中GML也可以直接作为数据源（需要下载GML扩展）。同时，GML的数据源为数据源动态化提供了实现的思路和可能性。<br />
<br />
<strong>PostGIS</strong><br />
PostGIS是加拿大Refractions公司支持的开源项目，它为开源数据库PostgreSQL提供了空间支持。PostGIS安装后，PostgreSQL中出现一个模版数据库，新建空间数据库时只需以PostGIS为模版即可。PostGIS在SQL级别上实现了基本的空间运算功能。另外绝大多数开源GIS软件（即使是不严格遵守OpenGIS标准的）都支持PostGIS数据表的直接载入，读写等功能。毋庸置疑，PostGIS是OpenGIS数据源最佳实现。<br />
<br />
<strong>MySQL Spatial</strong><br />
MySQL是开源数据库的大鳄，从MySQL4.0开始加入了Spatial扩展功能，实现了OpenGIS规定的几何数据类型，在SQL中的简单空间运算。但是从4.0之后到现在，MySQL的Spatial部分一直没有继续的更新和增强。加上早先MySQL在SQL上对空间运算支持的不完善（只支持基于最小外接矩形的关系判断），所以MySQL是开源数据源中一个不太让人满意的选择。不过由于MySQL在小型项目上的广泛引用，在一些情况下也是可以以MySQL为数据源的。<br />
<br />
<strong>db4o?： 对象数据库作为数据源的可能性</strong><br />
OpenGIS的系统架构完全是基于一个面向对象的模型的，而传统的关系数据库、Shapefile文件是现在应用的主流。在地理描述的过程中，关系数据库的特性并没有被完全发挥，而为此还需要有中间件做ORM的工作。试想直接将FeatureType和Features以对象形式存入对象数据库，整个系统至少在理论上可以减少一层。不过，以对象数据库作为数据源，还需要对象数据库的性能进一步提升。而之后的和已有软件的对接应该不成问题，因为db4o可以直接存储Feature对象和Geometry对象。<br />
但是因此产生的数据对实现的依赖性又是一个问题：数据和实现紧密耦合，数据中捆绑了代码，虽然db4o号称支持Java和.NET的的互操作，但是对于其它实现来说又成了问题。从这个角度来说，对象数据库作为数据源是一种倒退。<br />
<br />
<strong>为什么没有KML？</strong><br />
KML作为一种新的标准（没有在意最后是否通过），它的作用主要是网络中地理信息的传输。KML是一种面向客户端设计的数据形式，这是它不能取代GML地位的原因，同时也是它在GoogleEarth和很多地图应用上远强于GML的原因。对照一下KML和GML的形式就很容易理解，GML将属性数据存储为Element，而KML则是以超文本的形式存储属性数据，前者便于数据读取，后者便于客户端表现。于KML很类似的就是GeoRSS，效果是相似的。</span></span>
<img src ="http://www.blogjava.net/Rookie/aggbug/173615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-08 13:36 <a href="http://www.blogjava.net/Rookie/archive/2008/01/08/173615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符集和编码 </title><link>http://www.blogjava.net/Rookie/archive/2008/01/05/172991.html</link><dc:creator>zhhang920</dc:creator><author>zhhang920</author><pubDate>Sat, 05 Jan 2008 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/Rookie/archive/2008/01/05/172991.html</guid><wfw:comment>http://www.blogjava.net/Rookie/comments/172991.html</wfw:comment><comments>http://www.blogjava.net/Rookie/archive/2008/01/05/172991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Rookie/comments/commentRss/172991.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Rookie/services/trackbacks/172991.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关于编码问题，做了以下总结；大家共同探讨一下。<br />
<br />
<strong><span style="font-size: 14pt"><strong>一 预备知识</strong><br />
</span></strong><span style="font-size: 12pt">1，字符</span>：字符是抽象的最小文本单位。它没有固定的形状（可能是一个字形），而且没有值。&#8220;A&#8221;是一个字符，&#8220;€&#8221;（德国、法国和许多其他欧洲国家通用货币的标志）也是一个字符。&#8220;中&#8221;&#8220;国&#8221;这是两个汉字字符。字符仅仅代表一个符号，没有任何实际值的意义。<br />
2，字符集：字符集是字符的集合。例如，汉字字符是中国人最先发明的字符，在中文、日文、韩文和越南文的书写中使用。这也说明了字符和字符集之间的关系，字符组成字符集（iso8859-1，GB2312/GBK，unicode）。<br />
3，代码点：字符集中的每个字符都被分配到一个&#8220;代码点&#8221;。每个代码点都有一个特定的唯一数值，称为标值。该标量值通常用十六进制表示。<br />
4，代码单元：&nbsp;在每种编码形式中，代码点被映射到一个或多个代码单元。&#8220;代码单元&#8221;是各个编码方式中的单个单元。代码单元的大小等效于特定编码方式的位数：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-8 ：UTF-8 中的代码单元由 8 位组成；在 UTF-8 中，因为代码单元较小的缘故，每个代码点常常被映射到多个代码单元。代码点将被映射到一个、两个、三个或四个代码单元；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-16 ：UTF-16 中的代码单元由 16 位组成；UTF-16 的代码单元大小是 8 位代码单元的两倍。所以，标量值小于 U+10000 的代码点被编码到单个代码单元中；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-32：UTF-32&nbsp; 中的代码单元由 32 位组成；&nbsp;UTF-32 中使用的 32 位代码单元足够大，每个代码点都可编码为单个代码单元；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GB18030：GB18030&nbsp; 中的代码单元由 8 位组成；在 GB18030 中，因为代码单元较小的缘故，每个代码点常常被映射到多个代码单元。代码点将被映射到一个、两个或四个代码单元。<br />
5，举例：<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;中国北京香蕉是个大笨蛋&#8221;这是我定义的aka字符集；各字符对应代码点为：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;北 00000001<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;京 00000010<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;香 10000001<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;蕉 10000010<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是 10000100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;个 10001000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大 10010000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;笨 10100000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;蛋 11000000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中 00000100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;国 00001000&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面是我定义的 zixia 编码方案（8位），可以看到它的编码中表示了aka字符集的所有字符对应的 代码单元；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;北 10000001<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;京 10000010<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;香 00000001<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;蕉 00000010<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是 00000100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;个 00001000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大 00010000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;笨 00100000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;蛋 01000000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中 10000100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;国 10001000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所谓文本文件 就是我们按一定编码方式将二进制数据表示为对应的文本如00000001000000100000010000001000000100000010000001000000这样的文件。我用一个支持zixia编码和aka字符集的记事本打开，它就按照编码方案显示为&nbsp; "香蕉是个大笨蛋 "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果我把这些字符按照GBK另存一个文件，那么则肯定不是这个，而是<br />
1100111111100011 1011110110110110 1100101011000111 1011100011110110 1011010011110011 1011000110111111 1011010110110000 110100001010 <br />
<br />
<strong>二，字符集<br />
</strong>&nbsp;1， 常用字符集分类 <br />
<span style="color: red">ASCII</span>及其扩展字符集<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用：表语英语及西欧语言。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位数：ASCII是用7位表示的，能表示128个字符；其扩展使用8位表示，表示256个字符。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;范围：ASCII从00到7F，扩展从00到FF。<br />
&nbsp;<span style="color: red">ISO-8859-1</span>字符集<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用：扩展ASCII，表示西欧、希腊语等。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位数：8位，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;范围：从00到FF，兼容ASCII字符集。<br />
<span style="color: red">GB2312</span>字符集<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用：国家简体中文字符集，兼容ASCII。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位数：使用2个字节表示，能表示7445个符号，包括6763个汉字，几乎覆盖所有高频率汉字。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;范围：高字节从A1到F7, 低字节从A1到FE。将高字节和低字节分别加上0XA0即可得到编码。<br />
<span style="color: red">BIG5</span>字符集<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用：统一繁体字编码。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位数：使用2个字节表示，表示13053个汉字。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;范围：高字节从A1到F9，低字节从40到7E，A1到FE。<br />
<span style="color: red">GBK</span>字符集<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用：它是GB2312的扩展，加入对繁体字的支持，兼容GB2312。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位数：使用2个字节表示，可表示21886个字符。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;范围：高字节从81到FE，低字节从40到FE。<br />
<span style="color: red">GB18030</span>字符集<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用：它解决了中文、日文、朝鲜语等的编码，兼容GBK。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位数：它采用变字节表示(1 ASCII，2，4字节)。可表示27484个文字。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;范围：1字节从00到7F; 2字节高字节从81到FE，低字节从40到7E和80到FE；4字节第一三字节从81到FE，第二四字节从30到39。<br />
&nbsp;<span style="color: red">UCS</span>字符集<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用：国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织，UCS-2和UNICODE兼容。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位数：它有UCS-2和UCS-4两种格式，分别是2字节和4字节。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;范围：目前，UCS-4只是在UCS-2前面加了0x0000。<br />
<span style="color: red">UNICODE</span>字符集<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用：为世界650种语言进行统一编码，兼容ISO-8859-1。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位数：UNICODE字符集有多个编码方式，分别是UTF-8，UTF-16和UTF-32。<br />
&nbsp;2&nbsp;，按所表示的文字分类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 语言&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字符集&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正式名称&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;英语、西欧语&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASCII，ISO-8859-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBCS 多字节&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;简体中文&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GB2312&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;MBCS 多字节&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;繁体中文&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BIG5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBCS 多字节&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;简繁中文&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GBK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBCS 多字节&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;中文、日文及朝鲜语&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GB18030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MBCS 多字节&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;各国语言&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNICODE，UCS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBCS 宽字节 </p>
<p><strong>三，编码<br />
</strong>UTF-8：采用变长字节 (1 ASCII, 2 希腊字母, 3 汉字, 4 平面符号) 表示，网络传输, 即使错了一个字节，不影响其他字节，而双字节只要一个错了，其他也错了，具体如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果只有一个字节则其最高二进制位为0；如果是多字节，其第一个字节从最高位开始，连续的二进制位值为1的个数决定了其编码的字节数，其余各字节均以10开头。UTF-8最多可用到6个字节。</p>
<p>&nbsp;UTF-16：采用2字节，Unicode中不同部分的字符都同样基于现有的标准。这是为了便于转换。从 0x0000到0x007F是ASCII字符，从0x0080到0x00FF是ISO-8859-1对ASCII的扩展。希腊字母表使用从0x0370到0x03FF 的代码，斯拉夫语使用从0x0400到0x04FF的代码，美国使用从0x0530到0x058F的代码，希伯来语使用从0x0590到0x05FF的代 码。中国、日本和韩国的象形文字（总称为CJK）占用了从0x3000到0x9FFF的代码；由于0x00在c语言及操作系统文件名等中有特殊意义，故很多情况下需要UTF-8编码保存文本，去掉这个0x00。举例如下：<br />
UTF-16: 0x0080&nbsp; = 0000 0000 1000 0000<br />
UTF-8:&nbsp;&nbsp; 0xC280 = 1100 0010 1000 0000<br />
UTF-32：采用4字节。<br />
优缺点<br />
&nbsp;&nbsp;&nbsp;UTF-8、UTF-16和UTF-32都可以表示有效编码空间 (U+000000-U+10FFFF) 内的所有Unicode字符。<br />
&nbsp;&nbsp;&nbsp;&nbsp;使用UTF-8编码时ASCII字符只占1个字节，存储效率比较高，适用于拉丁字符较多的场合以节省空间。<br />
&nbsp;&nbsp;&nbsp;&nbsp;对于大多数非拉丁字符（如中文和日文）来说，UTF-16所需存储空间最小，每个字符只占2个字节。<br />
&nbsp;&nbsp;&nbsp;&nbsp;Windows NT内核是Unicode（UTF-16），采用UTF-16编码在调用系统API时无需转换，处理速度也比较快。<br />
&nbsp;&nbsp;&nbsp;&nbsp;采用UTF-16和UTF-32会有Big Endian和Little Endian之分，而UTF-8则没有字节顺序问题，所以UTF-8适合传输和通信。<br />
&nbsp;&nbsp;&nbsp;&nbsp;UTF-32采用4字节编码，一方面处理速度比较快，但另一方面也浪费了大量空间，影响传输速度，因而很少使用。<br />
<br />
<strong>四，如何判断字符集<br />
</strong>1，字节序<br />
首先说一下字节序对编码的影响，字节序分为Big Endian字节序和Little Endian字节序。不同的处理器可能不一样。所以，传输时需要告诉处理器当时的编码字节序。对于前者而言，高位字节存在低地址，低字节存于高地址；后者相反。例如，0X03AB, <br />
Big Endian字节序<br />
0000: 0 3<br />
0001: AB<br />
Little Endian字节序是<br />
0000: AB<br />
0001: 0 3<br />
2，编码识别<br />
UNICODE，根据前几个字节可以判断UNICODE字符集的各种编码，叫做Byte Order Mask方法BOM：<br />
UTF-8: EFBBBF (符合UTF-8格式，请看上面。但没有含义在UCS即UNICODE中)<br />
UTF-16 Big Endian：FEFF (没有含义在UCS-2中)<br />
UTF-16 Little Endian：FFFE (没有含义在UCS-2中)<br />
UTF-32 Big Endian：0000FEFF (没有含义在UCS-4中)<br />
UTF-32 Little Endian：FFFE0000 (没有含义在UCS-4中)<br />
<br />
GB2312：高字节和低字节的第1位都是1。<br />
<br />
BIG5，GBK&amp;GB18030：高字节的第1位为1。操作系统有默认的编码，常为GBK，可以下载别的并升级。通过判断高字节的第1位从而知道是ASCII或者汉字编码。</p>
<img src ="http://www.blogjava.net/Rookie/aggbug/172991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Rookie/" target="_blank">zhhang920</a> 2008-01-05 16:57 <a href="http://www.blogjava.net/Rookie/archive/2008/01/05/172991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>