﻿<?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-For a few RMB more</title><link>http://www.blogjava.net/asenyifei/</link><description>我曾经跳进冰冷彻骨的河水中，救起了一个豆蔻少女&lt;br&gt;
是的，是这样的</description><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 06:11:43 GMT</lastBuildDate><pubDate>Sun, 03 May 2026 06:11:43 GMT</pubDate><ttl>60</ttl><item><title>潜心学习XML之篇章三：DTD文档的结构</title><link>http://www.blogjava.net/asenyifei/articles/173436.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Fri, 25 Jan 2008 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/articles/173436.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/173436.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/articles/173436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/173436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/173436.html</trackback:ping><description><![CDATA[<blockquote><span style="color: rgb(153, 153, 153);">（本系列文章是我学习的过程中，整理出来的笔记，如有错漏，看官请一定不吝回复，让我能认识自己的不足，并改进错误。非常感谢！）</span><br />
</blockquote><blockquote>本章大概内容：<br />
1、为什么需要DTD<br />
2、XML文档如何使用DTD<br />
&nbsp;&nbsp;&nbsp; 1）内部定义DTD<br />
&nbsp;&nbsp;&nbsp; 2）关联外部DTD<br />
3、DTD的结构<br />
&nbsp;&nbsp;&nbsp; 1）元素类型声明<br />
&nbsp;&nbsp;&nbsp; 2）属性列表声明<br />
&nbsp;&nbsp;&nbsp; 3）实体声明<br />
&nbsp;&nbsp;&nbsp; 4）记号声明<br />
</blockquote>
<br />
<blockquote>&nbsp;&nbsp;&nbsp; 对于一个格式良好的XML文档，我们只能保证这个文档的格式符合XML规范，但是元素与元素的关系，元素与属性的关系，属性的取值，我们就无法保证了。对于一个格式良好的文档，如果只是在有限的应用中使用，或者是用于存储和传输，那么它也能能够很好的满足我们的应用，但是如果要其它的用户了解你所写的XML文档，或者与其它应用进行数据的交换，那么就有必要提供一种机制，来保证我们写的XML文档和别人所写的XML文档在结构上是相同的，元素与元素之间的关系是正确的，属性的取值也是符合要求的，那么这种机制在XML规范中已经为我们提供了，那就是前一章中介绍过的文档类型声明中提到的DTD。<br />
<br />
DTD（Document Type Definition），文档类型定义。<br />
<br />
&nbsp;&nbsp;&nbsp; 在XML标准中，描述了如何创建DTD，以及如何将它与根据它的规范所编写的XML文档相关联，并且还定义了XML处理器应该如何对DTD进行处理。有了DTD就可以检测XML文档的结构是否正确。<br />
DTD为XML文档的编写者与处理者提供了共同遵循的原则，使得与文档相关的各种工作有了统一的标准。<br />
<br />
如何在XML文档中引入DTD<br />
<br />
通过在XML文档中包含文档类型声明，来建立当前文档和DTD的关联。当进行有效性验证的XML处理器读到该声明时，它获取DTD，并根据其中定义的规则对文档进行检验。文档类型声明必须位于XML声明之后，且在根元素（文档元素）之前。不过，在XML声明和文档类型声明之间可以插入注释和处理指令。<br />
我们可以直接在XML文档中定义DTD，也可以通过URI引用外部的DTD文件，或者同时采用这两种方式。<br />
上一章中，已经学习过如何通过包含文档类型声明来建立与DTD的关联。现在来分析一下这两种包含方式。<br />
<br />
<strong>
在XML文档内部给出DTD的方式：</strong><br />
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE&nbsp;OrganizationChart&nbsp;[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!ELEMENT&nbsp;OrganizationChart&nbsp;(Name,Office)</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">ELEMENT&nbsp;Name&nbsp;(#PCDATA)</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">ELEMENT&nbsp;Office&nbsp;(#PCDATA)</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;]&gt;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">OrganizationChart</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);">OrganizationChart是该XML文档的document&nbsp;element</span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">Toone，INC.</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Office</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">zhuhai</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Office</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);">因为DTD中定义了Name，Office两个元素的顺序，Office元素不能放在Name元素的前面，否则不是有效的XML文档</span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">OrganizationChart</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
</blockquote><blockquote>
&nbsp;&nbsp;&nbsp; 文档类型声明由&lt;!开始，后面紧跟一个关键字DOCTYPE，然后是文档根元素的名字，接下来是标记声明块，标记声明块放在中括号[]之间，由一个或者多个标记声明构成，最后由&gt;结束。<br />
<br />
&nbsp;&nbsp;&nbsp; 在DTD中，所有的关键字都是大写的。不过，在DTD中定义的元素和属性的大小写是可以任意制定的，但是要注意，因为XML文档是大小写相关的，所以一旦给一个元素命名，那么在整个文档中要使用相同的大小写。例如，organizationchart和OrganizationChart是不同的两个元素名。<br />
<br />
&nbsp;&nbsp;&nbsp; 在XML文档中定义DTD，比较直观，修改也比较方便，而且不用担心XML处理器找不到DTD，但是它也有一些缺点：<br />
<br />
&nbsp;&nbsp;&nbsp; 1、在文档中定义DTD会导致文档本身的长度增加，在传输数据时，即使不需要验证文档的有效性，这些声明也要一起传输。<br />
<br />
&nbsp;&nbsp;&nbsp; 2、如果多个XML文档要共用同一个DTD，我们就需要在每一个文档中加入DTD。<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; <strong>引进外部DTD方式：</strong><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE&nbsp;OrganizationChart&nbsp;SYSTEM&nbsp;"dtdTest.dtd"&nbsp;</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">OrganizationChart</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">Toone，INC.</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Office</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">zhuhai</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Office</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">OrganizationChart</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
&nbsp;&nbsp;&nbsp; 对应DTD内容为：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">ELEMENT&nbsp;OrganizationChart&nbsp;(Name,Office)</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">ELEMENT&nbsp;Name&nbsp;(#PCDATA)</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">ELEMENT&nbsp;Office&nbsp;(#PCDATA)</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<br />
在文档类型声明时，用管间质SYSTEM或PUBLIC来指出外部DTD文件的位置，使用SYSTEM关键字的声明语法如下：<br />
<br />
&lt;!DOCTYPE 根元素的名字 SYSTEM "外部DTD文件的URI"&gt;<br />
<br />
SYSTEM关键字表示文档使用的是私有的DTD文件，&#8220;外部DTD文件的URI&#8221;可以是相对URI或者绝对URI。例如上面的例子使用的就是相对URI：<br />
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE&nbsp;OrganizationChart&nbsp;SYSTEM&nbsp;"dtdTest.dtd"&nbsp;</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<br />
使用PUBLIC关键字的声明语法如下：<br />
<br />
&lt;!DOCTYPE 根元素的名字 PUBLIC "DTD的名字" "外部DTD文件的URI"&gt;<br />
<br />
PUBLIC关键字用于声明公共的DTD，并且这个DTD还有一个名称，"DTD的名称"也称为公共标识符(public identifier)。这个DTD可以存放在某个公共的地方，XML处理程序会根据名称按照某种方式去检索DTD，如果XML处理器不能根据名称检索到DTD，就会使用"外部DTD文件的URI"来查找该DTD。例如Java web开发的web.xml中的DTD声明（版本不同会稍有不同，我们只关注它的结构）：<br />
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE&nbsp;web-app&nbsp;PUBLIC&nbsp;'-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN' <br />
'http://java.sun.com/dtd/web-app_2_3.dtd'</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<br />
<br />
DTD名称与XML名称略有不同，他们只能包含ASCII字母和数字符号、空格、回车符、换行符和一些标点符号：-'()+,/:=?;!#@*$_%.<br />
<br />
公共DTD名称要遵守一些约定。如果一项DTD是ISO标准，它的名称要以字符串"ISO"开始。如果是一个非ISO的标准组织批准的DTD，它的名字以加号（＋）开始。如果不是标准组织批准的DTD，它的名称以连字符（－）开始。这些开始字符或字符串后接双斜杠（//）和DTD所有者的名字（比如上面例子的Sun Microsystems，Inc.），之后是另一个双斜杠和DTD描述的文档类型，接着优势一个双斜杠后接ISO 639语言标识符，如EN表示英语，ZH表示中文。例如：<br />
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE&nbsp;OrganizationChart&nbsp;PUBLIC&nbsp;"-//Jason&nbsp;Chen//DTD&nbsp;organization&nbsp;chart&nbsp;1.0//ZH"&nbsp;"dtdTest.dtd"</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<br />
在上一章我们提到，如果我们的文档不依赖于外部文档，在XML声明中，可以通过standalone="yes"来声明这个文档是独立的文档。如果文档依赖于外部文档，可以通过standalone="no"来声明。当我们使用外部DTD文件时，就需要将属性standalone的值设置为"no"。<br />
在实际应用中，很少使用standalone属性，它的主要用途是作为XML处理器行业其他应用程序的标志，表示是否需要获取外部内容。如果文档依赖于外部文档，即使我们不使用standalone属性,XML处理器也能很好地进行处理。<br />
<br />
<strong>DTD的结构：<br />
<br />
</strong>DTD的结构一般由以下四种声明构成：<br />
&nbsp;&nbsp;&nbsp; 1、元素类型声明<br />
&nbsp;&nbsp;&nbsp; 2、属性列表声明<br />
&nbsp;&nbsp;&nbsp; 3、实体声明<br />
&nbsp;&nbsp;&nbsp; 4、记号声明<br />
一个典型的文档类型定义文件会吧所要创建的XML文档的元素结构、属性类型、实体引用等预先进行定义。<br />
下面分别介绍这四种声明。<br />
<br />
1、元素类型声明：<br />
<br />
一个DTD不仅要告诉XML处理器它所对应的文档根元素，而且还要告知处理器，文档的内容和结构，描述清楚文档结构中的每一个细节。<br />
元素类型声明不但说明了每一个文档中可能存在的元素，给出了元素的名称，而且给出了元素的具体类型。<br />
一个XML元素可以为空，也可以只包含字符数据，还可以有若干个子元素，而这些子元素同时又可以拥有它们的子元素。<br />
元素类型声明采用如下的语法格式：<br />
&lt;!ELEMENT 元素名称 元素内容说明&gt;<br />
元素内容说明可以指明五种可能的元素内容形式：＃PCDATA、子元素、混合内容、EMPTY和ANY。<br />
下面详细说明每一种元素内容说明。<br />
<br />
#PCDATA:<br />
<br />
关键字#PCDATA说明元素包含字符数据。<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE&nbsp;OrganizationChart&nbsp;[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!ELEMENT&nbsp;OrganizationChart&nbsp;(Name,Office)</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">ELEMENT&nbsp;Name&nbsp;(#PCDATA)</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">ELEMENT&nbsp;Office&nbsp;(#PCDATA)</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;]&gt;<br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">OrganizationChart</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">Toone，INC.</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Office</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">ZhuHai</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Office</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">OrganizationChart</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<br />
子元素：<br />
<br />
当一个元素只包含子元素，而没有字符数据时，则称此元素类型具有元素型内容（element content）。<br />
在该类型的元素声明时，通过内容模型来指定在其内容上的约束。内容模型是决定子元素类型和子元素出现顺序的一种简单语法。<br />
<br />
<br />
</blockquote><strong><br />
</strong>
<img src ="http://www.blogjava.net/asenyifei/aggbug/173436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2008-01-25 10:58 <a href="http://www.blogjava.net/asenyifei/articles/173436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个人要走多少路才能被称为男子汉？</title><link>http://www.blogjava.net/asenyifei/archive/2008/01/08/173601.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Tue, 08 Jan 2008 04:54:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/archive/2008/01/08/173601.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/173601.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/archive/2008/01/08/173601.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/173601.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/173601.html</trackback:ping><description><![CDATA[<blockquote>&nbsp;&nbsp;&nbsp; 昨天晚上和一个4年没见面的朋友视频聊天，她看着我说我比以前老成了，然后她问我，一个人要走多少的路才能被称为男子汉；我说我不知道，也从来没有想过这个问题，我只是为了生活在工作。然后我就想起来《阿甘正传》里面的2段歌词，给她敲了过去。<br />
<br />
一段是Jenny在酒吧裸体抱着吉他弹唱的：<br />
<br />
How many roads must a man walk down 一个人要走多少路<br />
<br />
Before you can call him a man? 才能被称为男子汉？<br />
<br />
Yes, and how many seas must the white dove sail 一条船要出几回海...<br />
<br />
Before she sleeps in the sand? 才能躺在沙滩上？<br />
<br />
Yes, and how many times 而到底需要多少次...<br />
<br />
Must the cannon balls fly 炮火的轰鸣<br />
<br />
Before they're forever banned? 才能结束战争？<br />
<br />
The answer, my friend 那答案，我的朋友...<br />
<br />
Is blowin'in the wind ...在风中飘。<br />
<br />
Is blowin'in the wind ...在风中飘。<br />
<br />
<br />
<br />
另一段是Forrest Gump跑步跑遍美国时的背景音乐：<br />
<br />
Lookin'out at the road rushin'under my wheels 看着路在车轮下延伸<br />
<br />
Lookin'back at the years gone by 看着一年年时光飞逝<br />
<br />
Like so many summer fields 就像一片片夏日农田<br />
<br />
In '65, I was 17 六五年那时我十七岁<br />
<br />
And runnin'up one on one 我在一刻不停地奔跑<br />
&nbsp;<br />
I don't know where I'm runnin'now 我不知道跑到了何处<br />
<br />
I'm just runnin'on 我只是在不停地奔跑<br />
<br />
Runnin'on 奔跑<br />
<br />
Runnin'on Empty 无缘无故地奔跑<br />
<br />
Runnin'on 奔跑<br />
<br />
Runnin'dry 直到精疲力尽<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; 一个人要走多少路才能被称为男子汉，那答案，我的朋友，它在风中飘；看着一年年时光飞逝，我只是一刻不停地奔跑，我不知道跑到了何处，我无缘无故地奔跑，直到精疲力尽。<br />
</blockquote><br />
<br />
<img src ="http://www.blogjava.net/asenyifei/aggbug/173601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2008-01-08 12:54 <a href="http://www.blogjava.net/asenyifei/archive/2008/01/08/173601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>潜心学习XML之篇章二：XML文档的结构</title><link>http://www.blogjava.net/asenyifei/articles/172884.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Mon, 07 Jan 2008 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/articles/172884.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/172884.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/articles/172884.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/172884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/172884.html</trackback:ping><description><![CDATA[<blockquote>
<span style="color: #999999;">（本系列文章是我学习的过程中，整理出来的笔记，如有错漏，看官请一定不吝回复，让我能认识自己的不足，并改进错误。非常感谢！）</span>
<br />
<span style="color: #999999;">
</span>
</blockquote>
<span style="color: #999999;">
<br />
</span>
<blockquote>
<span style="color: #000000;">推荐一个XML编辑工具，强大的XMLSpy，我用的是2008版。</span>
<br />
<span style="color: #999999;">
</span>
</blockquote>
<span style="color: #999999;">
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000000;">XML文档的结构可以从物理和逻辑两方面来看。<br />
</span></span>
<blockquote>
<span style="color: #999999;">
<span style="color: #000000;">&nbsp;&nbsp;&nbsp; <strong>一、从物理上而言</strong>，文档由称为实体（<span style="color: #999999;">entities</span>）的存储单元组成，实体都是具有内容并且都通过实体的名字进行标识（文档实体和外部DTD子集除外）。实体可以是一段文本，一个文件，一个数据库记录或者其他包含数据的项目，一个实体可以引用其它的实体，从而将它们包含在文档中。文档开始于&#8220;根（<span style="color: #999999;">root</span>）&#8221;或者文档实体（<span style="color: #999999;">document entity</span>）。格式良好的XML文档形成了一种层次树结构，这个树结构的树根就是文档实体，与其它实体不同，文档实体没有名字，只是用于表示文档树的根。XML文档的根元素被称位文档元素（<span style="color: #999999;">document element</span>），它和在其外部出现的处理指令，注释等作为文档实体的子节点，而根元素本身和其内部的子元素也是一棵树。<br />
<br />
&nbsp;&nbsp;&nbsp; 实体可以包含已分析（parsed）的或未分析的（unparsed）数据。已分析的数据由字符组成，其中一些字符组成字符数据，另一些字符组成标记。已分析的实体（parsed entity）内容被成为它的代替文本，这个文本被看称是文档整体的一部分，在XML处理器分析XML文档时，凡是文档中出现引用已分析实体的地方，都将被该实体的内容所替换。未分析的实体（unparsed entity）是一种资源，它的内容可以是也可以不是文本，并且，如果是文本的话，可以不是XML文本，每一个未分析的实体有一个相关联的用名字标识的记号（<font color="#999999">notation</font>）。除了要求XML处理器能向应用程序提供可用的实体和记号的标志符之外，XML对未分析的的实体内容不做任何限制。已分析的实体以实体引用的方式通过名字来调用，未分析的实体通过ENTITY或ENTITIES属性中给出的名字来调用。<br />
<br />
&nbsp;&nbsp;&nbsp; <strong>二、逻辑上而言</strong>，文档由声明，元素，注释，字符引用和处理指令组成，在文档中，所有这些都是通过显式的标记（markup）来指明的。XML标记（markup）包括开始标签（tag）、结束标签、空元素标签、实体引用、字符引用、注释、CDATA段定界符、文档类型声明、处理指令、XML声明、文本声明以及任何在文档实体顶层的空白（即，在文档元素之外，且不在任何其它的标记内部）。<br />
其它所有非标记的文本组成文档的字符数据。<br />
&nbsp;&nbsp;&nbsp; XML文档在逻辑上主要由以下五个部分组成：<br />
&nbsp;&nbsp;&nbsp; 1、XML声明<br />
&nbsp;&nbsp;&nbsp; 2、文档类型声明<br />
&nbsp;&nbsp;&nbsp; 3、元素<br />
&nbsp;&nbsp;&nbsp; 4、注释<br />
&nbsp;&nbsp;&nbsp; 5、处理指令<br />
<br />
下面具体介绍XML文档逻辑上的五个部分。<br />
<br />
<strong>1、XML声明</strong><br />
XML文档总是以一个XML声明开始的，其格式如下<br />
&nbsp;&nbsp;&nbsp; &lt;?xml 版本信息 [编码信息] [文档独立性信息]?&gt;<br />
其中，编码信息和文档独立性信息可以不写，而使用默认值。<br />
<br />
需要注意的是，XML声明总是在XML文档的最前面，其前面不能出现任何字符。<br />
<br />
下面是几个例子：<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">版本信息声明</span><span style="color: #008000;">--&gt;</span></div>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">编码信息声明.默认值是"UTF-8"</span><span style="color: #008000;">--&gt;</span></div>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;standalone="yes"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">文档独立性信息声明,如果文档依赖于外部文档，则需要将standalone属性设置为"no"</span><span style="color: #008000;">--&gt;</span></div>
<br />
<br />
<strong>2、文档类型声明</strong><br />
<br />
DTD（Document Type Definition），文档类型定义。<br />
<br />
首先提一个问题，如果你的一个XML文档给别人使用，别人怎么才能正确地定义XML文档中的元素，属性呢？就好像我们用Struts时，我们需要配置struts-config.xml,但是怎么保证我们的配置是正确的？答案就是用DTD来验证。<br />
<br />
一个遵循XML语法规则，并遵守相应DTD文件约束的XML文档称为<strong>有效的XML文档</strong>。<br />
<br />
XML从SGML继承了用于定义语法规则的DTD机制，DTD文件本身是不需要遵循XML规则的。大部分的XML应用都是使用DTD来定义的（还有一部分是用XML Schema来定义的，XML Schema在其专题中学习）。HTML就有一个标准的DTD文件，所以其组织结构和所有的标签都是固定的，DTD文件本身也是一个文本文件，通常用".DTD"为其扩展名。<br />
<br />
文档类型声明的作用就是指出XML文档所用的DTD，文档类型声明有两种形式。<br />
<br />
一种是在XML文档中给出DTD，如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;OrganizationChart&nbsp;[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!ELEMENT&nbsp;OrganizationChart&nbsp;(Name,Office)</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">ELEMENT&nbsp;Name&nbsp;(#PCDATA)</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">ELEMENT&nbsp;Office&nbsp;(#PCDATA)</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;]&gt;<br />
</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OrganizationChart</span><span style="color: #0000ff;">&gt;<br />
&lt;!--OrganizationChart是该XML文档的document element--&gt;<br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Toone，INC.</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Office</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">zhuhai</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Office</span><span style="color: #0000ff;">&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!--因为DTD中定义了Name，Office两个元素的顺序，Office元素不能放在Name元素的前面，否则不是有效的XML文档--&gt;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OrganizationChart</span><span style="color: #0000ff;">&gt;</span></div>
<br />
另一种是在一个外部文件定义的DTD文件，如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;OrganizationChart&nbsp;SYSTEM&nbsp;"dtdTest.dtd"&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OrganizationChart</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Toone，INC.</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Office</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">zhuhai</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Office</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OrganizationChart</span><span style="color: #0000ff;">&gt;</span></div>
对应DTD文件dtdTest.dtd内容为:
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">ELEMENT&nbsp;OrganizationChart&nbsp;(Name,Office)</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">ELEMENT&nbsp;Name&nbsp;(#PCDATA)</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">ELEMENT&nbsp;Office&nbsp;(#PCDATA)</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
<br />
<strong>3、元素<br />
<br />
</strong>在XML中，元素由开始标签、元素内容和结束标签构成，对于空元素，由空元素标签构成。<br />
每一个元素都有一个用名字标识的类型，同时它可以由一个属性说明集，每一个属性说明有一个名字和一个值。<br />
在给元素命名的时候要注意，以"xml"或其他任何匹配(('X'|'x')</span>&nbsp;</span>
<span style="color: #999999;">
<span style="color: #000000;">('M'|'m'</span>
</span>
<span style="color: #999999;">
<span style="color: #000000;">)('L'|'l'</span>
</span>
<span style="color: #999999;">
<span style="color: #000000;">))的字符串开头的名字，被保留用于XML规范的当前版本或者后续版本的标准化。此外，在给元素命名时，还要遵循下列规范：<br />
&nbsp;&nbsp;&nbsp; 1、名字只能以字母、下划线（_）或者冒号（:）开头；<br />
&nbsp;&nbsp;&nbsp; 2、名字中可以包含字母、数字、下划线以及其他在XML标准中允许的字符；<br />
&nbsp;&nbsp;&nbsp; 3、名字中不能包含空格；<br />
&nbsp;&nbsp;&nbsp; 4、名字中尽可能不要使用冒号（:），因为冒号在名字空间中被用于分隔名字空间前缀和本地部分。<br />
<br />
元素的四种形式：<br />
&nbsp;&nbsp;&nbsp; 1、空元素<br />
&nbsp;&nbsp;&nbsp; 2、带有属性的空元素<br />
&nbsp;&nbsp;&nbsp; 3、带有内容的元素<br />
&nbsp;&nbsp;&nbsp; 4、带有内容和属性的元素<br />
<br />
在一个元素的内容中，字符数据可以是不包含任何标记的起始定界符和CDATA段的定界符的任意字符串，也就是会所在元素的内容中，字符数据不能有和号（&amp;）和小于号（</span>
</span>&lt;），也不能有字符串"]]&gt;"。那么如果我们要用这些字符的话，必须用他们对应的字符引用和实体引用来表示，见下表：<br />
<br />
<table border="0" cellpadding="2" cellspacing="2" width="500">
    <tbody>
        <tr align="center">
            <td colspan="4">&nbsp;元素内容的字符引用和实体引用</td>
        </tr>
        <tr>
            <td>&nbsp;字符</td>
            <td>&nbsp;字符引用<br />
            （十进制代码）<br />
            </td>
            <td>&nbsp;字符引用<br />
            （十六进制代码）<br />
            </td>
            <td colspan="1">预定义实体引用&nbsp;</td>
        </tr>
        <tr>
            <td>&nbsp;&lt;</td>
            <td>&lt; <br />
            </td>
            <td>&lt;<br />
            </td>
            <td colspan="1">&amp;lt; <br />
            </td>
        </tr>
        <tr>
            <td>&gt; <br />
            </td>
            <td>&gt; <br />
            </td>
            <td>&gt; <br />
            </td>
            <td colspan="1">&amp;gt; <br />
            </td>
        </tr>
        <tr>
            <td valign="top">"<br />
            </td>
            <td valign="top"><br />
            </td>
            <td valign="top"><br />
            </td>
            <td valign="top">&amp;quot;<br />
            </td>
        </tr>
        <tr>
            <td valign="top">'<br />
            </td>
            <td valign="top"><br />
            </td>
            <td valign="top"><br />
            </td>
            <td valign="top">&amp;apos;<br />
            </td>
        </tr>
        <tr>
            <td valign="top">&amp;<br />
            </td>
            <td valign="top"><br />
            </td>
            <td valign="top"><br />
            </td>
            <td valign="top">&amp;amp;<br />
            </td>
        </tr>
    </tbody>
</table>
<br />
CDATA段中包含的都是纯字符数据，在字符数据可以出现的任何地方都可以使用CDATA段。<br />
CDATA段主要用于需要将整个文本解释为字符数据而不是标记的情况下。CDATA段中的内容不被XML处理器分析，所以可以在其中包含任意的字符。<br />
<br />
<br />
<strong>4、注释<br />
<br />
</strong>注释用于对文档中的内容起到一个说明作用。<br />
在XML文档中，注释可以出现在文档中其它表ijizhiwai的任何闻之，另外，它们还可以在人当类型声明中语法（grammar）允许的地方出现。<br />
XML的注释和HTML的注释类似，都是以&lt;!--开始，以--&gt;结束。位于&lt;!--和--&gt;之间的数据将被XML处理器忽略。<br />
使用XML注释需要注意一下五点：<br />
&nbsp;&nbsp;&nbsp; 1、注释不能出现在XML声明之前，XML声明必须是文档最前面的部分。下面的情况是不允许的：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">Author:Jason&nbsp;Chen</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"</span><span style="color: #0000ff;">?&gt;</span></div>
<br />
&nbsp;&nbsp;&nbsp; 2、注释不能出现在标记中，下面的例子是非法的：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">author</span><span style="color: #ff0000;">&lt;!--This&nbsp;document&nbsp;author--</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&gt;Jason&nbsp;Chen</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">author</span><span style="color: #0000ff;">&gt;</span></div>
<br />
&nbsp;&nbsp;&nbsp; 3、注释可以包围和隐藏标记，但是要注意，在注释掉标记以后，要保持文档的完整结构。<br />
&nbsp;&nbsp;&nbsp; 4、字符串"--"（双连字符）不能出现在注释中。<br />
<br />
<strong>5、处理指令</strong><br />
<br />
处理指令（Processing Instructions）允许文档中包含由应用程序来处理的指令。在XML文档中，有可能会包含一些非XML格式的数据，这些数据XML处理器无法处理，我们可以通过处理指令来通知其它应用程序来处理这些数据。<br />
处理指令的语法和XML声明类似，以&lt;?开始， 以?&gt;结束。一个常见的使用样式表单的处理指令如下所示：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml-stylesheet&nbsp;href="style.css"&nbsp;type="text/css"</span><span style="color: #0000ff;">?&gt;</span></div>
<br />
在开始标记&lt;?后的第一个字符"xml-stylesheet"叫做处理指令的目标，它必须标识要用到的应用程序，要注意的是对于其它的非W3C定义的处理指令不能以字符串"XML"和"xml"开头；其余的部分是传递给应用程序的字符数据。应用程序从处理指令中取得目标和数据，执行要求的动作。<br />
<br />
处理指令的目标可以是要使用的程序的名字，或者是一个类似于xml-stylesheet这样的很多程序可以识别的通用标识符。不同的应用程序支持不同的处理指令，对于不认识的处理指令，大多数应用程序采取忽略的方式进行处理。<br />
<br />
xml-stylesheet处理指令总是放在XML声明之后，第一个元素之前。其它的处理指令可以放在除了标记的内部和XML声明之前的任何位置。<br />
要注意，虽然XML声明和处理指令的语法形式相似，但XML声明并不是处理指令，XML处理程序对XML声明和处理指令采取的是不同的处理方式。<br />
<br />
<br />
本章学习到此为止，下一章学习如何编写DTD。<br />
</blockquote>
<img src ="http://www.blogjava.net/asenyifei/aggbug/172884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2008-01-07 15:44 <a href="http://www.blogjava.net/asenyifei/articles/172884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>潜心学习XML之篇章一：概述</title><link>http://www.blogjava.net/asenyifei/articles/172869.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Fri, 04 Jan 2008 15:40:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/articles/172869.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/172869.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/articles/172869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/172869.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/172869.html</trackback:ping><description><![CDATA[<blockquote>
&nbsp;&nbsp;&nbsp; <span style="color: #999999;">（本系列文章是我学习的过程中，整理出来的笔记，如有错漏，看官请一定不吝回复告知我，让我能认识自己的不足，并改进错误。非常感谢！）<br />
<br />
</span>
&nbsp;&nbsp;&nbsp; XML的全称是Extensible Markup Language，意思是可扩展的标识语言，是SGML（<span style="color: #999999;">Standard Generalized Markup Language</span>）的一个子集。1998年2月，W3C组织发布了XML1.0标准，其目的是为了在Web上能以现有的超文本标识语言（HTML）的使用提供，接收和处理通用的SGML。XML以一种开放的，自我描述的方式定义了数据结构，在描述数据内容的同事能突出对结构的描述，从而体现出数据与数据之间的关系。XML的最新版本是1.1，于2004年2月4日发布。目前大多数的应用还是基于XML1.0的推荐标准。1.0版本的规范在下面网址中定义：<br />
<a target="_blank" href="http://www.w3.org/TR/2004/REC-xml-20040204/">http://www.w3.org/TR/2004/REC-xml-20040204/</a><br />
<br />
&nbsp;&nbsp;&nbsp; XML不是（X）HTML的扩展，两者之所以看起来很像，是因为它们都是SGML发展而来的标识语言，语法很相似，标识的使用也很相似。HTML只是SGML的一个子应用，它的DTD（<span style="color: #999999;">Document Type Definition</span>）被固定下来，所以不能用来定义新的应用。而XML不同，我们可以根据自己的需要，随意定义我们自己的DTD，所以，利用XML，可以定义出新的应用，比如，RDF（<span style="color: #999999;">Resource Description Framework，资源描述框架，blog中经常看见的RSS1.0就是RDF Site Summary，RDF网站摘要,关于RSS，我将在潜心学习RSS中去认识它</span>）,CDF（<span style="color: #999999;">Channel Definition Format，通道定义格式，微软在IE4.0中引入的一个新功能。基于CDF，网站可以通过活动通道将数据聚合到设置为活动桌面的用户桌面上</span>）。<br />
<br />
&nbsp;&nbsp;&nbsp; XML规范的制定者之一Tim Bray说，XML的设计出发点是取SGML的优点，去除复杂的部分，使其保持轻巧，可以在Web上工作。<br />
<br />
&nbsp;&nbsp;&nbsp; XML的应用非常广泛，计算机和网络的世界里，处处活跃着它矫健轻快的身影，或为配置文件，或为数据存储，或为数据传输使用的格式。XML已经成为事实上的数据交换格式的标准，使用XML，意味着所有设备，比如手机，PDA，信息家电等等，都可以轻松的读取，解析你的数据。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; XML很重要的两个特性：<br />
&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">一：XML文档仅仅描述数据，它不关心数据是如何表现外观的，</span>比如字体大小，颜色，间距之类的，所以它能将数据和数据的表现方式完全的分离开，这个特性很重要，HTML就万万做不到这种完全的分离，所以W3C组织不得不推出一个XHTML，作为HTML向XML过度的产物。<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">二：XML对文档的格式要求非常严格，符合标准的XML文档就是格式良好的XML文档（Well-Formed XML Documents）。</span>这是使得XML文档能被普遍认可的一个特点。严格的文档格式，减轻了解析的复杂性。相对来说，HTML的文档格式就非常松散，解析起来就比较复杂，也造成了浏览器兼容的问题。XML文档格式的要求有下面几点：<br />
&nbsp;&nbsp;&nbsp; 1、所有的标签都必须关闭，开始标签有对应的结束标签，空标签必须被关闭。<br />
&nbsp;&nbsp;&nbsp; 2、所有的标签都区分大小写<br />
&nbsp;&nbsp;&nbsp; 3、所有的标签都必须合理嵌套<br />
&nbsp;&nbsp;&nbsp; 4、所有的标签的属性值必须用收引号（""）或单引号（''）括起来<br />
&nbsp;&nbsp;&nbsp; 5、XML文档有且只能有一个根元素<br />
&nbsp;&nbsp;&nbsp; 6、（还有其他的嘛？）<br />
<br />
本章到此结束，重点掌握XML与HTML的异同点，XML的两个特性。<br />
下一章学习XML的结构。<br />
</blockquote>
<br />
<img src ="http://www.blogjava.net/asenyifei/aggbug/172869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2008-01-04 23:40 <a href="http://www.blogjava.net/asenyifei/articles/172869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 用JavaScript判断一个日期是否正确的日期</title><link>http://www.blogjava.net/asenyifei/archive/2007/07/09/129108.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Mon, 09 Jul 2007 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/archive/2007/07/09/129108.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/129108.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/archive/2007/07/09/129108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/129108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/129108.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<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"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">var&nbsp;all</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20070229</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">日期字串</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">var&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">all.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">年</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">var&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">all.substring(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">月</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">var&nbsp;d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">all.substring(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">日</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">var&nbsp;isLeap</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">((y</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">(y</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">(y</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">是否闰年</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((isLeap</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">02</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">29</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">isLeap</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">02</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">28</span><span style="COLOR: #000000">))&nbsp;alert(</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">&nbsp;all);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">04</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">06</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">09</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">31</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;alert(</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">&nbsp;all);</span></div>
<img src ="http://www.blogjava.net/asenyifei/aggbug/129108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2007-07-09 18:12 <a href="http://www.blogjava.net/asenyifei/archive/2007/07/09/129108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Judge chars in a String and the max count.</title><link>http://www.blogjava.net/asenyifei/archive/2007/07/09/129101.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Mon, 09 Jul 2007 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/archive/2007/07/09/129101.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/129101.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/archive/2007/07/09/129101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/129101.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/129101.html</trackback:ping><description><![CDATA[<br><br><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"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;org.jason.test;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Collections;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.HashMap;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Iterator;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Map;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.StringTokenizer;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_189_1065_Open_Image onclick="this.style.display='none'; Codehighlighter1_189_1065_Open_Text.style.display='none'; Codehighlighter1_189_1065_Closed_Image.style.display='inline'; Codehighlighter1_189_1065_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_189_1065_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_189_1065_Closed_Text.style.display='none'; Codehighlighter1_189_1065_Open_Image.style.display='inline'; Codehighlighter1_189_1065_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;StringTest&nbsp;</span><span id=Codehighlighter1_189_1065_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_189_1065_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_234_1063_Open_Image onclick="this.style.display='none'; Codehighlighter1_234_1063_Open_Text.style.display='none'; Codehighlighter1_234_1063_Closed_Image.style.display='inline'; Codehighlighter1_234_1063_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_234_1063_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_234_1063_Closed_Text.style.display='none'; Codehighlighter1_234_1063_Open_Image.style.display='inline'; Codehighlighter1_234_1063_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id=Codehighlighter1_234_1063_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_234_1063_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;StringBuffer(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a,b,c,d,e,f,a,a,d,c,c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;st&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sb.toString().split(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;set&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;HashMap();<br><img id=Codehighlighter1_436_783_Open_Image onclick="this.style.display='none'; Codehighlighter1_436_783_Open_Text.style.display='none'; Codehighlighter1_436_783_Closed_Image.style.display='inline'; Codehighlighter1_436_783_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_436_783_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_436_783_Closed_Text.style.display='none'; Codehighlighter1_436_783_Open_Image.style.display='inline'; Codehighlighter1_436_783_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">st.length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_436_783_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_436_783_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(i&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;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;st[i]);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;st[i];<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;o&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;set.get(temp);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(o);<br><img id=Codehighlighter1_621_682_Open_Image onclick="this.style.display='none'; Codehighlighter1_621_682_Open_Text.style.display='none'; Codehighlighter1_621_682_Closed_Image.style.display='inline'; Codehighlighter1_621_682_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_621_682_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_621_682_Closed_Text.style.display='none'; Codehighlighter1_621_682_Open_Image.style.display='inline'; Codehighlighter1_621_682_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(o&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_621_682_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_621_682_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.put(temp,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Integer(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">));<br><img id=Codehighlighter1_688_773_Open_Image onclick="this.style.display='none'; Codehighlighter1_688_773_Open_Text.style.display='none'; Codehighlighter1_688_773_Closed_Image.style.display='inline'; Codehighlighter1_688_773_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_688_773_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_688_773_Closed_Text.style.display='none'; Codehighlighter1_688_773_Open_Image.style.display='inline'; Codehighlighter1_688_773_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_688_773_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_688_773_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.put(temp,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Integer(((Integer)o).intValue()</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;set.keySet().iterator();<br><img id=Codehighlighter1_860_925_Open_Image onclick="this.style.display='none'; Codehighlighter1_860_925_Open_Text.style.display='none'; Codehighlighter1_860_925_Closed_Image.style.display='inline'; Codehighlighter1_860_925_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_860_925_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_860_925_Closed_Text.style.display='none'; Codehighlighter1_860_925_Open_Image.style.display='inline'; Codehighlighter1_860_925_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(it.hasNext())&nbsp;</span><span id=Codehighlighter1_860_925_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Codehighlighter1_860_925_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println((String)it.next()</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Integer)Collections.max(set.values());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(i.intValue());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.blogjava.net/asenyifei/aggbug/129101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2007-07-09 17:47 <a href="http://www.blogjava.net/asenyifei/archive/2007/07/09/129101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)的问题</title><link>http://www.blogjava.net/asenyifei/articles/82575.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Tue, 21 Nov 2006 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/articles/82575.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/82575.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/articles/82575.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/82575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/82575.html</trackback:ping><description><![CDATA[找不到mysql socket的问题，我最近碰到了好多次<br />重装系统以前，我的mysql，apache，php都是自己编译安装的，当时并没有碰到这些问题，<br />重装系统以后，我的mysql是通过yum安装的，apache1.37和php5.2是自己编译安装的，出现了这个问题<br /><br />首先是<b>mysqld</b>启动不了，<br />我通过vim /etc/my.cnf，修改了[mysqld]选项下面的socket的值<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">socket</span><span style="color: rgb(0, 0, 0);">=/</span><span style="color: rgb(0, 0, 0);">var</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">lib</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">mysql</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">mysql.sock<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);"></span><br /></div></span></div><span style="color: rgb(0, 0, 0);">ok，mysqld可以启动了<br /><br /></span>接下来，是<b>mysql</b>启动不了，同样，vim /etc/my.cnf,添加了如下脚本：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">[mysql]<br />socket</span><span style="color: rgb(0, 0, 0);">=/</span><span style="color: rgb(0, 0, 0);">var</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">lib</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">mysql</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">mysql.sock<br /></span></div><br />然后，<b>mysqladmin</b>启动不了，还是一样，在[mysqladmin]下面socket值设置为同样的路径<br />ok,可以启动了<br /><br />最后，用<b>php</b>连接的时候，又出现这个问题了<br />Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)<br />我首先想到的是，在/etc/php.ini修改mysql.default_socket的值，在这个文件中，关于mysql.default_socket的值的说明是这样的，<br />; Default socket name for local MySQL connects.  If empty, uses the built-in MySQL defaults.<br />这个值一开始是空的，也就是说，如果我们不主动去修改的话，php将会使用内建在mysql中的默认值<br />于是，我修改了这个值，设置为：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">mysql.default_socket</span><span style="color: rgb(0, 0, 0);">=/</span><span style="color: rgb(0, 0, 0);">var</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">lib</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">mysql</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">mysql.sock<br /></span></div>然后我重新启动apache，结果无效；reboot系统，结果无效<br />我火大了，php就非得去连接/tmp/mysql.sock，可是我的系统里面就是没有这个路径下的这个文件，那我就给你链接一个，于是我做了下面的操作，<br />ln -s /<span style="color: rgb(0, 0, 0);">var</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">lib</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">mysql</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">mysql.sock /tmp/mysql.sock<br /><br />重新打开我的php页面，ok，这下能连接到数据库了。<br /><br /></span>就这样，我把这个问题解决了，可是我还是有点迷糊，为什么一定要去找/tmp/mysql.sock这个文件，是不是一开始我就给它ln一个链接就可以解决？这个mysql.sock到底是用来做什么的？于是我就产生了看看这个文件内容的想法,<br /><br />cat /var/lib/mysql/mysql.sock<br />提示我，cat: /var/lib/mysql/mysql.sock: 没有那个设备或地址<br /><br />less /var/lib/mysql/mysql.sock<br />/var/lib/mysql/mysql.sock is not a regular file (use -f to see it)<br />我强行查看！<br />less -f /var/lib/mysql/mysql.sock<br />/var/lib/mysql/mysql.sock: 没有那个设备或地址<br />～～<br />vim /var/lib/mysql/mysql.sock<br />提示权限不足，我是root用户耶，还提示权限不足，奇怪了<br />～～～～<br />ll  /var/lib/mysql/mysql.sock<br />看到的属性是：<br />srwxrwxrwx 1 mysql mysql 0 11-21 14:39 /var/lib/mysql/mysql.sock<br />这
个属性引起了我的注意，档案类型标志是s,还真没去了解过这样的类型，到鸟哥的私房菜去找了一下，原来，这个是资料接口档，用我们大陆说的习惯应该是套接
字文件(sockets)，这种文件一般用在网络上的资料套接，mysqld守护进程生成了这个文件，其他与mysql相关的程序想使用mysql，估计
就是通过这个文件了。<br />这种特殊文件即使是最高权限的root用户，也是不能查看不能编辑的，有点像档案标志是p的管道文件。<br /><img src ="http://www.blogjava.net/asenyifei/aggbug/82575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2006-11-21 17:32 <a href="http://www.blogjava.net/asenyifei/articles/82575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript跨页面传变量，url传变量</title><link>http://www.blogjava.net/asenyifei/archive/2006/10/09/74067.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Mon, 09 Oct 2006 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/archive/2006/10/09/74067.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/74067.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/archive/2006/10/09/74067.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/74067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/74067.html</trackback:ping><description><![CDATA[利用document.cookie跨页面传递 变量是个简便的方法，但是我们移植的浏览器konqueror对cookie的支持不好，所以只好用url来传递。<br />需求是这样的，要从一个页面中（movies_list.html），把电影的文件名和电影名称传到下一个页面(playing_movies.html)去。<br />在movies_list.html中，定义一个函数：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> sendARGS(movieName,movieTitle){<br />   </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> url</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">playing_movies.html?moviename=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">movieName</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&amp;movietitle=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">movieTitle;<br />   document.location.assign(url); <br />}<br /></span></div><br />用sendARGS（）这个函数就可以把2个变量送到playing_movies.html中。如果文件名是clip01.avi,电影名称是mission impossible III，那么传过来的url将是playing_movies.html?moviename=clip01.avi&amp;movietitle=mission%20impossible%20III<br /><br />在playing_movies.html中，需要截取这2个变量，定义了这样的一个函数：<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> movieName,movieTitle;<br /></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> getARGS(){<br />    urlStr</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">document.location.href;<br />    </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> pos1</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">urlStr.indexOf('</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">');<br />    </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> pos2</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">urlStr.indexOf('</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">');<br />    movieName</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">urlStr.substring(pos1</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">11</span><span style="color: rgb(0, 0, 0);">,pos2);<br />    movieTilte</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">urlStr.substring(pos2</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">11</span><span style="color: rgb(0, 0, 0);">).replace(</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">\</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">20</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">g,'  ');<br />}</span></div><br /><br /><img src ="http://www.blogjava.net/asenyifei/aggbug/74067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2006-10-09 14:13 <a href="http://www.blogjava.net/asenyifei/archive/2006/10/09/74067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用wget下载东西</title><link>http://www.blogjava.net/asenyifei/archive/2006/09/27/72372.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Wed, 27 Sep 2006 11:02:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/archive/2006/09/27/72372.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/72372.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/archive/2006/09/27/72372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/72372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/72372.html</trackback:ping><description><![CDATA[新系统没有aptana了，再去download一个，方便写javascript。<br />因为是国外的下载地址，用firefox下的话有时候半天都不动，我还是喜欢自己定制好的下载方式<br />去它的主页www.aptana.com找到for linux的url<br /><a title="http://www.web20.com/downloads/current/Linux/VM/Aptana_IDE_Setup.bin" href="http://www.web20.com/downloads/current/Linux/VM/Aptana_IDE_Setup.bin">http://www.web20.com/downloads/current/Linux/VM/Aptana_IDE_Setup.bin</a><br /><br />然后到另一个工作区开个新的终端，<br />wget -c -t 0 -T 5 http://www.web20.com/downloads/current/Linux/VM/Aptana_IDE_Setup.bin<br />让wget慢慢get吧<br /><br /><img src ="http://www.blogjava.net/asenyifei/aggbug/72372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2006-09-27 19:02 <a href="http://www.blogjava.net/asenyifei/archive/2006/09/27/72372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache编译错误Cannot load /usr/local/apache/libexec/mod_rewrite.so into server: /usr/local/apache/libexec/mod_rewrite.so: undefined symbol: dbm_fetch</title><link>http://www.blogjava.net/asenyifei/archive/2006/09/27/72363.html</link><dc:creator>Jason.Chen</dc:creator><author>Jason.Chen</author><pubDate>Wed, 27 Sep 2006 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/asenyifei/archive/2006/09/27/72363.html</guid><wfw:comment>http://www.blogjava.net/asenyifei/comments/72363.html</wfw:comment><comments>http://www.blogjava.net/asenyifei/archive/2006/09/27/72363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asenyifei/comments/commentRss/72363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asenyifei/services/trackbacks/72363.html</trackback:ping><description><![CDATA[新系统装少了软件包，导致的毛病真多，现在给apache加rewrite模块又出毛病了<br /><br />Cannot load /usr/local/apache/libexec/mod_rewrite.so into server: /usr/local/apache/libexec/mod_rewrite.so: undefined symbol: dbm_fetch<br /><br />google之，得到解决办法，<br />到目录apache_1.3.37/src/modules/standard<br /><br /> gcc -shared -o mod_rewrite.so mod_rewrite.lo<br />／＊没报错＊／<br />gcc -shared -o mod_rewrite.so mod_rewrite.lo -lgdbm<br />／＊这下出错了，下面是错误信息＊／<br />/usr/bin/ld：找不到 -lgdbm<br />collect2: ld 返回 1<br /><br /> 找不到－gdbm这个库，又是因为我装系统时没选上<br /><br />到我的fedora光盘去搜索*dbm*的rpm包，找到2个<br /><br />gdbm-1.8.0-26.2.i386.rpm  gdbm-devel-1.8.0-26.2.i386.rpm<br /><br />rpm -ivh gdbm-devel-1.8.0-26.2.i386.rpm<br />／＊rpm成功＊／<br />重新执行<br />gcc -shared -o mod_rewrite.so mod_rewrite.lo -lgdbm<br />／＊没报错，gcc成功了＊／<br /><br />ok，将新编译好的mod_rewrite.so库文件cp到/usr/local/apache/libexec/<br />执行apachectl start<br />返回成功启动，thanks all<br /><img src ="http://www.blogjava.net/asenyifei/aggbug/72363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asenyifei/" target="_blank">Jason.Chen</a> 2006-09-27 18:07 <a href="http://www.blogjava.net/asenyifei/archive/2006/09/27/72363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>