<?xml version='1.0' encoding='gb2312' ?>
			      <rss version='2.0'>
			      <channel>
  				  <title>w3pop.com :: 网络学院</title>
  				  <link>http://www.w3pop.com/learn/</link>
  				  <description>网络生活、学习、交流</description><item>
						<title>javascript 中的 XMLDOM 对象</title>
						<link>http://www.w3pop.com/learn/view/doc/js_xml_dom/</link>
						<description><![CDATA[<p><strong><font size="3">一 IE中的XML DOM</font></strong><br />
1.微软通过ActiveX的MSXML库提供了支持，通过：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;ActiveXObject(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument.5.0</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">)</span></div>
<p>得到一个XML DOM对象，这是在IE6中的，如果你的IE是更老版本的，可以使用下面的函数得到，如果你没有安装MSXML，将不能得到：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;createXMLDOM()&nbsp;{<br />
&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: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;arrSignatures&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;[</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument.5.0</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument.4.0</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,<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;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument.3.0</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,<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;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">Microsoft.XmlDom</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">];<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;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;i</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;arrSignatures.length;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">try</span><span style="color: rgb(0,0,0)">&nbsp;{<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;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;ActiveXObject(arrSignatures[i]);<br />
&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;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom;<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;</span><span style="color: rgb(0,0,255)">catch</span><span style="color: rgb(0,0,0)">&nbsp;(oError)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">ignore</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&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;&nbsp;<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;</span><span style="color: rgb(0,0,255)">throw</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Error(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">你的系统没有安装MSXML</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);&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></div>
<p><br />
当然，如果你使用prototype库，可以使用Try.these函数。<br />
<br />
2.XML DOM对象可以通过load和loadXML方法载入xml文件或者字符串：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp; oXmlDom.load(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">test.xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp; oXmlDom.loadXML(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&lt;root&gt;&lt;/root&gt;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);</span></div>
<p>然后这个<span style="color: rgb(0,0,0)">oXmlDom就可以使用所有的DOM对象方法，比如documentElement.tagName,参见：<br />
&nbsp;<a href="http://www.blogjava.net/killme2008/archive/2007/02/06/98218.html">《javascript之DOM技术（一）》</a><br />
<a href="http://www.blogjava.net/killme2008/archive/2007/02/10/99135.html">&nbsp;《javascript之dom技术（二）》</a><br />
<br />
3.XML DOM默认是通过异步载入xml文件的，可以通过设置async值来选择是同步还是异步：<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">oXmlDom.async</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,255)">true</span><span style="color: rgb(0,0,0)">;</span></div>
<br />
<br />
4.</span>IE的XML DOM拥有一个readyState值用来表示载入文件的状态：<br />
<br />
0&mdash;&mdash;准备载入<br />
1&mdash;&mdash;正在载入<br />
2&mdash;&mdash;载入完成<br />
3&mdash;&mdash;载入完成并可用，但有一部分数据也许不可用<br />
4&mdash;&mdash;完全载入，完全可用。<br />
<br />
相应的有一个onreadystatechange事件，当状态改变时发生，我们可以通过监听此事件来判断XML DOM对象的可用性</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">oXmlDom.onreadystatechange&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(oXmlDom.readyState&nbsp;</span><span style="color: rgb(0,0,0)">==</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">4</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">load&nbsp;test.xml&nbsp;done!</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">Tag&nbsp;name&nbsp;of&nbsp;the&nbsp;root&nbsp;element&nbsp;is&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom.documentElement.tagName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">The&nbsp;root&nbsp;element&nbsp;has&nbsp;this&nbsp;many&nbsp;children:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom.documentElement.childNodes.length);<br />
<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;};</span></div>
<p><br />
5.IE的XML DOM对象有一个xml属性，用来返回xml文件的字符串形式，比如</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">oXmlDom.async</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;<br />
oXmlDom.load(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">test.xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
alert(oXmlDom.xml);</span></div>
<p><br />
alert出：&lt;root&gt;&lt;child/&gt;&lt;child/&gt;&lt;/root&gt;<br />
<br />
6.IE，当载入的XML文件或者字符串解析错误时，将产生一个parseError对象，我们在下面的代码中演示此对象的属性：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oXmlDom.async&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oXmlDom.load(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">errors.xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<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;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">0表示没有错误</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(oXmlDom.parseError&nbsp;</span><span style="color: rgb(0,0,0)">!=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oError&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom.parseError;<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;alert(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">An&nbsp;error&nbsp;occurred:\n错误代码:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&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: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;oError.errorCode&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">\n</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&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: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">行数:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;oError.line&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">\n</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&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: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">列数:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;oError.linepos&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">\n</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&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: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">原因:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;oError.reason);<br />
&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;}</span></div>
<p><br />
<br />
<strong><font size="3">二.Mozilla的XML DOM对象<br />
</font></strong>1.XML DOM对象的创建，符合DOM标准的，通过document.implementation.createDocument()方法。比如：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<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)">&nbsp;oXmlDom</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">document.implementation.createDocument(</span><span style="color: rgb(0,0,0)">&quot;&quot;</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">&quot;&quot;</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">);</span></div>
<p><br />
这三个参数分别是文档命名空间、文档元素的标签名以及一个文档类型对象（总为null），比如：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<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)">&nbsp;oXmlDom</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">document.implementation.createDocument(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">http://www.rubyeye.net</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">root</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">);</span></div>
<p><br />
这段代码创建了一个&lt;a0:root xmlns=&quot;http://www.rubyeye.net&quot;/&gt;的XML DOM对象<br />
<br />
<br />
2.载入xml，Mozilla与IE不同的是只提供了一个load()方法用于载入xml文件，没有提供loadXML()方法用于载入XML字符串。同步载入XML文件的代码与IE相同：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">oXmlDom.async</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">;<br />
oXmlDom.load(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">test.xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);</span></div>
<p><br />
异步载入稍有不同，因为Mozilla并不支持readyState属性，并且没有onreadystatechange事件，它只有一个onload的事件，当载入完成时触发；或者说相当于IE的readyState属性等于4的状态。</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">oXmlDom.onload</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">(){<br />
alert(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">done</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
}<br />
oXmlDom.load(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">test.xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);</span></div>
<p><br />
要将XML字符串解析为DOM对象，必须使用DOMParser对象：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<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)">&nbsp;oParser</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;DOMParser();<br />
var oXmlDom=oParser.parseFromString(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&lt;root&gt;&lt;child/&gt;&lt;/root&gt;,</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">text</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);</span></div>
<p><br />
两个参数：要解析的XML字符串以及字符串的内容类型（只能为text/xml或者application/xml）。<br />
不过我们可以实现自己的loadXML方法:</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">&nbsp;&nbsp;Document.prototype.loadXML&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;(sXml)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oParser&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;DOMParser();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;oParser.parseFromString(sXml,&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">text/xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
&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: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">删除原文档内容</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">while</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.firstChild)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.removeChild(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.firstChild);<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;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">导入新的文档内容</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;i</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom.childNodes.length;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oNewNode&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.importNode(oXmlDom.childNodes[i],&nbsp;</span><span style="color: rgb(0,0,255)">true</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.appendChild(oNewNode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
</span></div>
<p><br />
3.Mozilla没有提供IE的xml属性来返回XML文档内容，只能通过使用XMLSerializer对象：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<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)">&nbsp;oSerializer</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;XMLSerializer();<br />
</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;sXml</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">oSerializer.serializeToString(oXmlDom,</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">text/xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);</span></div>
<p>同样两个参数：XML DOM对象以及转化成的文档类型。<br />
<br />
同样，我们也可以给Mozilla的XML DOM对象定义一个属性xml，通过defineGetter方法：</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)">Node.prototype.__defineGetter__(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,255)">function</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)">&nbsp;oSerializer</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;XMLSerializer();<br />
</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;sXml</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">oSerializer.serializeToString(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">text/xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
});</span></div>
<p><br />
以后就可以以IE的方式，oXmlDom.xml来获取XML文档内容。<br />
<br />
4。错误处理，同样与IE不同，Mozilla当解析错误时会返回一段代码，以标签&lt;prasereoor&gt;包括其中的代码解释了错误发生的原因以及位置等信息，我们只有通过正则表达式解析此段代码，提取错误信息。</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,255)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var</span><span style="color: rgb(0,0,0)">&nbsp;reError&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">/&gt;</span><span style="color: rgb(0,0,0)">([\s\S]</span><span style="color: rgb(0,0,0)">*?</span><span style="color: rgb(0,0,0)">)Location:([\s\S]</span><span style="color: rgb(0,0,0)">*?</span><span style="color: rgb(0,0,0)">)Line&nbsp;Number&nbsp;(\d</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">),&nbsp;Column&nbsp;(\d</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">):</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">sourcetext</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">([\s\S]</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)">:\</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)">)</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">;<br />
&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: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">返回代码的标签名为parsererror，表示错误发生</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(oXmlDom.documentElement.tagName&nbsp;</span><span style="color: rgb(0,0,0)">==</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">parsererror</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reError.test(oXmlDom.xml);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">An&nbsp;error&nbsp;occurred:\n描述:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;RegExp.$</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">\n</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">文件名:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;RegExp.$</span><span style="color: rgb(0,0,0)">2</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">\n</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">行数:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;RegExp.$</span><span style="color: rgb(0,0,0)">3</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">\n</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">列数:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;RegExp.$</span><span style="color: rgb(0,0,0)">4</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">\n</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">原因:&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">&nbsp;RegExp.$</span><span style="color: rgb(0,0,0)">5</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p><br />
<font size="3"><strong>三，提供一个跨浏览器的XML DOM对象解决方案，来自于《javascript高级程序设计》</strong></font></p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br>
<br>
Code highlighting produced by Actipro CodeHighlighter (freeware)<br>
http://www.CodeHighlighter.com/<br>
<br>
--><span style="color: rgb(0,0,0)"><br />
</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;XmlDom()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">通过对象/属性检测法，判断是IE来是Mozilla</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(window.ActiveXObject)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;arrSignatures&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;[</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument.5.0</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument.4.0</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,<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;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument.3.0</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML2.DOMDocument</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,<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;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">Microsoft.XmlDom</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">];<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: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;i</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;arrSignatures.length;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">try</span><span style="color: rgb(0,0,0)">&nbsp;{<br />
&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;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;ActiveXObject(arrSignatures[i]);<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;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom;<br />
&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: rgb(0,0,255)">catch</span><span style="color: rgb(0,0,0)">&nbsp;(oError)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">ignore</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&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;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">throw</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Error(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">MSXML&nbsp;is&nbsp;not&nbsp;installed&nbsp;on&nbsp;your&nbsp;system.</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">同上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: rgb(0,0,255)">else</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(document.implementation&nbsp;</span><span style="color: rgb(0,0,0)">&amp;&amp;</span><span style="color: rgb(0,0,0)">&nbsp;document.implementation.createDocument)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;document.implementation.createDocument(</span><span style="color: rgb(0,0,0)">&quot;&quot;</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">&quot;&quot;</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">创建Mozilla版本的parseError对象</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oXmlDom.parseError&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueOf:&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;()&nbsp;{&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.errorCode;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toString:&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;()&nbsp;{&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.errorCode.toString()&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">初始化parseError对象</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oXmlDom.__initError__();<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;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oXmlDom.addEventListener(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">load</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__checkForErrors__();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__changeReadyState__(</span><span style="color: rgb(0,0,0)">4</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;</span><span style="color: rgb(0,0,255)">false</span><span style="color: rgb(0,0,0)">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: rgb(0,0,255)">else</span><span style="color: rgb(0,0,0)">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">throw</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;Error(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">Your&nbsp;browser&nbsp;doesn't&nbsp;support&nbsp;an&nbsp;XML&nbsp;DOM&nbsp;object.</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">此处用到了该书中一个浏览器系统检测js文件，如果是Mozilla</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(isMoz)&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Document.prototype.readyState&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Document.prototype.onreadystatechange&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Document.prototype.__changeReadyState__&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;(iReadyState)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.readyState&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;iReadyState;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">typeof</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.onreadystatechange&nbsp;</span><span style="color: rgb(0,0,0)">==</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">function</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.onreadystatechange();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">初始化parseError对象</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Document.prototype.__initError__&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.errorCode&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.filepos&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.line&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.linepos&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.reason&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.srcText&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.url&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">null</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Document.prototype.__checkForErrors__&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;()&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.documentElement.tagName&nbsp;</span><span style="color: rgb(0,0,0)">==</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">parsererror</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;reError&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">/&gt;</span><span style="color: rgb(0,0,0)">([\s\S]</span><span style="color: rgb(0,0,0)">*?</span><span style="color: rgb(0,0,0)">)Location:([\s\S]</span><span style="color: rgb(0,0,0)">*?</span><span style="color: rgb(0,0,0)">)Line&nbsp;Number&nbsp;(\d</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">),&nbsp;Column&nbsp;(\d</span><span style="color: rgb(0,0,0)">+</span><span style="color: rgb(0,0,0)">):</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">sourcetext</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">([\s\S]</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)">:\</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)">)</span><span style="color: rgb(0,0,0)">/</span><span style="color: rgb(0,0,0)">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reError.test(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.xml);<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;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.errorCode&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,0)">-</span><span style="color: rgb(0,0,0)">999999</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.reason&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;RegExp.$</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.url&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;RegExp.$</span><span style="color: rgb(0,0,0)">2</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.line&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;parseInt(RegExp.$</span><span style="color: rgb(0,0,0)">3</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.linepos&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;parseInt(RegExp.$</span><span style="color: rgb(0,0,0)">4</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.parseError.srcText&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;RegExp.$</span><span style="color: rgb(0,0,0)">5</span><span style="color: rgb(0,0,0)">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">定义Mozilla的loadXML方法&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;Document.prototype.loadXML&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;(sXml)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__initError__();<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__changeReadyState__(</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oParser&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;DOMParser();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;oParser.parseFromString(sXml,&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">text/xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">while</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.firstChild)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.removeChild(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.firstChild);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">for</span><span style="color: rgb(0,0,0)">&nbsp;(</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;i</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">0</span><span style="color: rgb(0,0,0)">;&nbsp;i&nbsp;</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">&nbsp;oXmlDom.childNodes.length;&nbsp;i</span><span style="color: rgb(0,0,0)">++</span><span style="color: rgb(0,0,0)">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oNewNode&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.importNode(oXmlDom.childNodes[i],&nbsp;</span><span style="color: rgb(0,0,255)">true</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.appendChild(oNewNode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">载入后检查错误</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__checkForErrors__();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">没有问题，设置readyState属性为4</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__changeReadyState__(</span><span style="color: rgb(0,0,0)">4</span><span style="color: rgb(0,0,0)">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Document.prototype.__load__&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;Document.prototype.load;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Document.prototype.load&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;(sURL)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__initError__();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__changeReadyState__(</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">.__load__(sURL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Node.prototype.__defineGetter__(</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,255)">function</span><span style="color: rgb(0,0,0)">&nbsp;()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">var</span><span style="color: rgb(0,0,0)">&nbsp;oSerializer&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;XMLSerializer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)">&nbsp;oSerializer.serializeToString(</span><span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">text/xml</span><span style="color: rgb(0,0,0)">&quot;</span><span style="color: rgb(0,0,0)">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
<br />
}</span></div>]]></description>
					  </item><item>
						<title>3个js字符编码函数区别</title>
						<link>http://www.w3pop.com/learn/view/doc/js_ecoding/</link>
						<description><![CDATA[<p>js对文字编码有3个函数： <br />
escape<a href="http://5iscript.cn/#f">,</a>encodeURI,encodeURIComponent， <br />
对应的解码函数：unescape,decodeURI,decodeURIComponent <br />
<br />
1、escape对ansi码0-255以外的字符进行编码输出%u****格式即unicode值，escape 方法返回一个包含了 charstring 内容的字符串值（ Unicode 格式）。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替，其中 xx 等于表示该字符的十六进制数。例如，空格返回的是 &quot;%20&quot; <br />
escape不编码字符有69个：*，+，-，.，/，@，_，0-9，a-z，A-Z <br />
<br />
2、encodeURI类似escape，用于地址栏编码 <br />
encodeURI不编码字符有82个：!，#，$，&amp;，'，(，)，*，+，,，-，.，/，:，;，=，?，@，_，~，0-9，a-z，A-Z <br />
<br />
3、encodeURIComponent用于地址栏编码。将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。它是将中文、韩文等特殊字符转换成utf-8格式的url编码,如果你的页面编码是gb2312的话，服务器端接收的将是乱码. <br />
encodeURIComponent不编码字符有71个：!， '，(，)，*，-，.，_，~，0-9，a-z，A-Z <br />
<br />
所以js使用数据时可以使用escape，对于地址栏数据，最好用encodeURIComponent进行编码。</p>]]></description>
					  </item><item>
						<title>ASP.NET中 Bin,App_Browser,App_code,App_Data,App_Theme 等文件</title>
						<link>http://www.w3pop.com/learn/view/doc/ASPNET_APP_Folder_Roles/</link>
						<description><![CDATA[<p><strong><span class="Title"><strong>1.&nbsp; Bin文件夹</strong>&nbsp;</span></strong>&nbsp;</p>
<p>Bin文件夹包含应用程序所需的，用于控件、组件或者需要引用的任何其他代码的可部署程序集。该目录中存在的任何.dll文&nbsp; 件将自动地链接到应用程序。如果在该文件夹中留有不用的或过期的文件，则可能出现&ldquo;二义性引用(ambiguous&nbsp; reference)&rdquo;异常的风险。换句话说，如果两个不同的程序集定义相同的类(相同的命名空间和名称)，则ASP.NET运行库不能决定应该使用哪一&nbsp; 个程序集，从而抛出一个异常。在开发时，当我们重新命名一个项目或一个程序集的名称时，这是常见的错误。为了避免这种错误，一定不要在该文件夹中保留任何&nbsp; 不必要的程序集，或者至少要从配置文件的&lt;assemblies&gt;节中删除如下代码行：</p>
<p>&lt;add&nbsp; assembly=&quot;*&quot;&nbsp; /&gt;</p>
<p>在表1.10所列的所有文件夹中，只有Bin可以被ASP.NET&nbsp; 1.x应用程序识别。该文件夹是强制性的。</p>
<p><span class="Title">2.&nbsp; App_Browser文件夹</span></p>
<p>该可选的文件夹包含.browser文件。.browser文件描述浏览器(不管是移动设备浏览器，还是台式机浏览器)的特&nbsp; 征和功能。ASP.NET在安装路径下的Config\Browser文件夹中安装了大量.browser文件，这些文件供所有应用程序共享。我们只是把&nbsp; 当前应用程序特有的浏览器文件放在App_Browser文件夹下。.browser文件的内容即时动态地进行编译，以便向ASP.NET运行库提供最新&nbsp; 的浏览器信息。</p>
<p>让我们简单谈谈拥有一个自定义的.browser文件可能有帮助的场景。设想应用程序使用了一个在某个浏览器下不能有效呈现的控件。在指定的浏览器中显示宿主页面时，可以编写一个.browser文件，迫使ASP.NET使用一个不同的适配器来生成该控件。</p>
<p>&lt;browsers&gt;</p>
<p>&lt;browser&nbsp; id=&quot;browserID&quot;&gt;</p>
<p>&lt;controlAdapters&gt;</p>
<p>&lt;adapter&nbsp; controlType=&quot;Samples.CustomControl&quot;</p>
<p>adapterType=&quot;Samples.Adapters.CustomControlAdapter&quot;&nbsp; /&gt;</p>
<p>&lt;/controlAdapters&gt;</p>
<p>&lt;/browser&gt;</p>
<p>&lt;/browsers&gt;</p>
<p>假设browserID与ASP.NET识别的标准浏览器之一相匹配，则上文所示的.browser文件指示在指定的浏览器下使用CustomControlAdapter呈现CustomControl。</p>
<p><span class="Title">3.&nbsp; App_Code文件夹</span></p>
<p>App_Code文件夹正好在Web应用程序根目录下，其存储所有应当作为应用程序的一部分动态编译的类文件。这些类文件自&nbsp; 动链接到应用程序，而不需要在页面中添加任何显式指令或声明来创建依赖性。App_Code文件夹中放置的类文件可以包含任何可识别的ASP.NET组件&nbsp; &mdash;&mdash;自定义控件、辅助类、build提供程序、业务类、自定义提供程序、HTTP处理程序等。</p>
<p>&nbsp; &nbsp; 注意&nbsp; &nbsp; &nbsp; &nbsp; 在开发时，对App_Code文件夹的更改会导致整个应用程序重新编译。对于大型项目，这可能不受欢迎，而且很耗时。为此，鼓励大家将代码进行模块化处理&nbsp; 到不同的类库中，按逻辑上相关的类集合进行组织。应用程序专用的辅助类大多应当放置在App_Code文件夹中。</p>
<p>App_Code文件夹中存放的所有类文件应当使用相同的语言。如果类文件使用两种或多种语言编写，则必须创建特定语言的子目录，以包含用每种语言编写的类。一旦根据语言组织这些类文件，就要在web.config文件中为每个子目录添加一个设置：</p>
<p>&lt;compilation&gt;</p>
<p>&lt;codeSubDirectories&gt;</p>
<p>&lt;add&nbsp; directoryName=&quot;VBFolder&quot;&nbsp; /&gt;</p>
<p>&lt;/codeSubDirectories&gt;</p>
<p>&lt;/compilation&gt;</p>
<p>重要的是，特定语言的子目录应在web.config文件中注册，否则，不管它们属于哪个文件夹，App_Code文件夹下&nbsp; 的所有文件将被编译成一个单独的程序集。上述配置脚本描述了这么一种情况，即所有的C#文件都放在App_Code文件夹的根目录下，而把几个&nbsp; Visual&nbsp; Basic&nbsp; .NET类文件移入VBFolder目录中。如果&lt;codeSubDirectories&gt;节中提到的目录不存在，则会收到一个编译错误提&nbsp; 示。</p>
<p>App_Code根文件夹中的文件被编译成App_Code_xxx.dll程序集，其中xxx是随机生成的字符序列。一个&nbsp; 给定子目录中的文件将被编译成一个名为App_SubCode_xxx_yyy.dll的动态创建的程序集，其中xxx指示子目录的名称，而yyy是一个&nbsp; 随机字符序列。只有在应用程序根目录中的web.config文件中进行了设置，&lt;codeSubDirectories&gt;节才有效。</p>
<p>在App_Code目录或任何其他子目录中放置一个assemblyinfo.cs文件，可以创建一个强命名的程序集。显然，如果该文件夹包含Visual&nbsp; Basic&nbsp; .NET文件，那么将使用assemblyinfo.vb文件。程序集配置文件可以引用一个.snk文件来保存强名称的密钥。</p>
<p>&nbsp; 注意&nbsp; &nbsp; &nbsp; &nbsp; 给一个程序集设置一个强名称，首先必须获得一个公开/私有密钥对。通过使用强名称(Strong&nbsp; Name)工具(sn.exe)，可以获得这样一个密钥对。强名称工具是我们可以在.NET&nbsp; Framework的安装路径中发现的SDK&nbsp; binary之一。密钥对文件通常有一个.snk扩展名。可以将该文件保存到一个应用程序文件夹中，并在assemblyinfo.cs文件中引用它，如下所示：</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [assembly:&nbsp; AssemblyKeyFileAttribute(@&quot;yourKeyPair.snk&quot;)]</p>
<p>注意，Visual&nbsp; Basic&nbsp; .NET是在包含Visual&nbsp; Studio&nbsp; Solution的目录中寻找密钥文件，而C#编译器则在包含该binary的目录中寻找密钥文件。据此可知，用此属性调整我们使用的路径，或者把密钥文件放在合适的文件夹中。</p>
<p>在随后发生的任何重新生成中，程序集的名称将发生变化。同时，老的AppDomain请求一结束，就删除老的程序集。</p>
<p>App_Code文件夹并非只能包含类文件。特别是，它可以包含并能自动地处理代表数据架构的XSD文件。把一个XSD文件&nbsp; 添加到该文件夹中时，编译器将把它解析成一个有类型的DataSet类，并将它添加到应用程序作用域中。在ASP.NET&nbsp; 1.x中，这一工作由Visual&nbsp; Studio&nbsp; .NET向导，使用一个命令行实用程序(xsd.exe)完成的。</p>
<p>&nbsp; &nbsp; 注意&nbsp; &nbsp; &nbsp; &nbsp; 使用web.config文件注册一个组件(例如，一个自定义的服务器控件或一个自定义的HTTP处理程序)时，通常要求指定包含该代码的程序集名称。如&nbsp; 果该组件定义在App_Code文件夹中，则应该用什么名称来指示程序集？在这种情况下，只是忽略程序集信息，并规定完整的类名即可。如果没有规定任何程&nbsp; 序集，则ASP.NET运行库将试图从任何已装载的程序集中装入该类，包括为App_Code文件夹动态创建的程序集。</p>
<p><span class="Title">4.&nbsp; App_Data文件夹</span></p>
<p>App_Data文件夹应该包含应用程序的本地数据存储。它通常以文件(诸如Microsoft&nbsp; Access或Microsoft&nbsp; SQL&nbsp; Server&nbsp; Express数据库、XML文件、文本文件以及应用程序支持的任何其他文件)形式包含数据存储。该文件夹内容不由ASP.NET处理。该文件夹是ASP.NET提供程序存储自身数据的默认位置。</p>
<p>&nbsp; 注意&nbsp; &nbsp; &nbsp; &nbsp; 默认ASP.NET帐户被授予对文件夹的完全访问权限。如果碰巧要改变ASP.NET帐户，一定要确保新帐户被授予对该文件夹的读/写访问权。</p>
<p><span class="Title">5.&nbsp; App_GlobalResources文件夹</span></p>
<p>正如其他应用程序一样，ASP.NET应用程序也可以使用资源，而且通常应该使用资源。资源是隔离应用程序用户界面的可局部&nbsp; 化部分的一种有效方法。一般而言，资源是与程序相关的不可执行的文本。典型的资源有图像、图标、文本和附属文件，但是任何可序列化的对象也可以被看作资&nbsp; 源。应用程序资源存储在应用程序的外部，这样就能在不影响和重新编译应用程序本身的情况下重新编译和替换它们。</p>
<p>ASP.NET应用程序需要有一个主要程序集来保存应用程序默认的或中性的资源。此外，还要部署许多附属程序集，它们中各自&nbsp; 包含我们需要支持的某种文化的本地化资源。在ASP.NET&nbsp; 1.x中，编译一个程序集内的资源有点麻烦。需要手动地将基于XML的资源文件(那些带.res扩展名的资源)编译成.resources二进制文件。这&nbsp; 些文件既可以嵌入到一个.NET可执行文件中，也可以编译成附属程序集。使用资源文件生成器实用程序resgen.exe，将文本和基于XML的资源文件&nbsp; 转变为.resource文件。资源文件名称遵循baseName.cultureName.resource命名约定，其中baseName通常是应用&nbsp; 程序的名称：</p>
<p>resgen.exe&nbsp; ProAspNet20.resx&nbsp; ProAspNet20.it.resources</p>
<p>创建.resource文件以后，应当把它嵌入到一个程序集中，甚至可以作为一个资源容器来使用。要把一个资源文件嵌入到一个附属程序集中，可以使用程序集连接器工具(al.exe)。在命令行上，指出程序集所使用的文化(如下面示例中的it，它代表意大利)和名称。</p>
<p>al&nbsp; /out:ProAspNet20.resources.dll&nbsp; /c:it&nbsp; /embed:ProAspNet20.it.resources</p>
<p>在编译附属程序集之后，它们将有相同的名称。将它们部署到不同的子目录中，分别按文化命名。</p>
<p>幸运的是，对于ASP.NET&nbsp; 2.0，附属程序集的时代已经一去不复返了。更准确地说，附属程序集仍然存在，但是由于App_GlobalResources保留文件夹，对开发人员来说它们已经成为过去的事情。</p>
<p>该文件夹中的任何定位的.resx文件自动地被编译成附属程序&nbsp; 集。.resx文件的名称包含文化信息，以帮助ASP.NET运行库环境的程序集生成。如下文件，resources.resx,&nbsp; resources.it.resx,&nbsp; resources.fr.resx，生成中性程序集以及适合于意大利(Italian)和法国(French)文化的附属程序集。如果没有要求特定文&nbsp; 化，则中性程序集是默认的文化资源。</p>
<p>App_GlobalResources文件夹中的资源文件是应用程序的全局资源，因而可以从任何页面中引用它。和ASP.NET&nbsp; 1.x相比资源读取结果也极大地简化了：</p>
<p>&lt;asp:Label&nbsp; Runat=&quot;server&quot;&nbsp; Text=&quot;&lt;%$&nbsp; Resources:ResxFile,&nbsp; MyResName&nbsp; %&gt;&quot;&nbsp; /&gt;</p>
<p>可以使用最新的称为Resources的$-表达式以声明的方式绑定全局资源(第5章将详细介绍$-表达式)。该表达式包括两个参数：.resx资源文件的名称(没有扩展名)，以及要检索的资源的名称。以编程的方式访问资源，请使用如下代码：</p>
<p>HttpContext.GetGlobalResourceObject(resxFile,&nbsp; MyResName)</p>
<p>这两个参数都是字符串，并且与$-表达式中的参数具有相同的作用。此外，$-表达式Resources的实现在内部使用GetGlobalResourceObject。</p>
<p><span class="Title">6.&nbsp; App_LocalResources文件夹</span></p>
<p>App_LocalResources文件夹位于包含一些ASP.NET页面的文件夹下的一个子目录。该文件夹可以使用位于&nbsp; 目录结构中高一级目录中的页面命名的.resx文件进行填充。假定父文件夹包含test.aspx，则可以在App_LocalResources文件夹&nbsp; 中找到一些可用的资源文件如下：test.aspx.resx、test.aspx.it.resx和test.aspx.fr.resx。显然，上述文&nbsp; 件中存储的资源仅对test.aspx页面有影响，因而只能在链接的页面中看见它们(可以使用它们)。</p>
<p>如何访问一个页面特有的资源呢？对于编程访问，可使用如下代码：</p>
<p>HttpContext.GetLocalResourceObject(&quot;/ProAspNet20/ResPage.aspx&quot;,</p>
<p>&quot;PageResource1.Title&quot;)</p>
<p>第1个参数指出页面虚拟路径；第2个参数是资源名称。对于声明式访问，使用meta:ResourceKey属性。例如，</p>
<p>&lt;asp:Button&nbsp; Runat=&quot;server&quot;&nbsp; meta:resourcekey=&quot;ButtonResource1&quot;&nbsp; /&gt;</p>
<p>该声明将一个惟一的资源键与特定按钮实例关联。局部文件.resx包含prefix.name形式的条目，其中prefix&nbsp; 是资源键，而name是绑定控件上的属性名。为了赋予按钮一个本地化标题(Text属性)，只要在资源文件中创建一个&nbsp; ButtonResource1.Text条目即可。</p>
<p>局部和全局资源文件夹中存在的资源文件都被编译，以创建附属程序集的类。最后的结果是开发人员创建.resx文件，并测试该页面。而ASP.NET编译机制会完成其余工作。</p>
<p><span class="Title">7.&nbsp; App_Themes文件夹</span></p>
<p>App_Themes文件夹为ASP.NET控件定义主题。主题包含在App_Themes文件夹下的一个文件夹。根据定义，一个主题是一组带有样式信息的文件。主题文件夹中的文件内容被编译，以生成一个类，而该类被页面调用以编程的方式设置主题化控件的样式。</p>
<p>App_Themes文件夹列出应用程序的本地主题。&nbsp; 应用程序还可以继承如下文件夹中定义的全局主题：</p>
<p>%WINDOWS%\Microsoft.NET\Framework\[version]\ASP.NETClientFiles\Themes</p>
<p>从编译的角度看，全局主题和局部主题没有区别。如果一个给定名称的主题，既存在应用程序的本地主题，又存在服务器机器的全局主题，则本地主题优先适用。</p>
<p><span class="Title">8.&nbsp; App_WebReferences文件夹</span></p>
<p>在Visual&nbsp; Studio&nbsp; .NET&nbsp; 2003中，一个需要访问Web服务的ASP.NET应用程序，将通过&ldquo;添加Web引用&rdquo;对话框获得相应的.wsdl文件。Web服务的WSDL(Web&nbsp; Service&nbsp; Description&nbsp; Language)文档，对于从页面使用Web服务是不够的。ASP.NET页面最终是一个托管类，并且需要与另一个托管类通信。因此，Web服务被一个&nbsp; 代理类所包装。该代理类是由Visual&nbsp; Studio使用命令行工具wsdl.exe的服务创建的。该代理类尽量包含与Web服务商的Web方法一样多的方法，并且它结合了Web服务的公共接口&nbsp; 定义的任何自定义的数据类型。</p>
<p>这个操作不需要开发人员付出很大的代价。然而，开发人员显然要依赖于Visual&nbsp; Studio来生成代理类。如果能够直接把.wsdl文件放在应用程序的目录树的某个地方，并让ASP.NET处理其余的任务，这样不是更容易、更简单&nbsp; 吗？这正好是App_WebReferences文件夹要做的事情。</p>
<p>它识别那些用来描述所绑定的Web服务的.wsdl文件，并生成运行时代理类，以便ASP.NET页面能够以类型安全的方式&nbsp; 放置对Web服务的调用。App_WebReferences文件夹可以包含子文件夹。子文件夹的名称驱动最后所得到的代理类的命名空间，而WSDL文件&nbsp; 定义类名。例如，samples.wsdl文件和ProsAspNet20子文件夹将创建一个称为ProAspNet20.Samples的代理类。该动&nbsp; 态创建的程序集称为App_WebReferences.xxx.dll，其中xxx是一个随机的字符序列。</p>
<p>文件夹名称<br />
&nbsp; 文件类型<br />
&nbsp; 注&nbsp; &nbsp; &nbsp; &nbsp; 释<br />
&nbsp; <br />
Bin<br />
&nbsp; .dll<br />
&nbsp; 包含应用程序所需的任何预生成的程序集<br />
&nbsp; <br />
App_Browsers<br />
&nbsp; .browser<br />
&nbsp; 包含应用程序特有的浏览器定义文件，ASP.NET用它来识别各浏览器及确定它们的功能<br />
&nbsp; <br />
App_Code<br />
&nbsp; .cs、.vb、.xsd、自定义的文件类型<br />
&nbsp; 包含作为应用程序的一部分编译的类的源文件。当页面被请求时，ASP.NET编译该文件夹中的代码。该文件夹中的代码在应用程序中自动地被引用<br />
&nbsp; <br />
App_Data<br />
&nbsp; .mdb、.mdf、.xml<br />
&nbsp; 包含Microsoft&nbsp; Office&nbsp; Access和SQL&nbsp; Express文件以及XML文件或其他数据存储<br />
&nbsp; <br />
App_GlobalResources<br />
&nbsp; .resx<br />
&nbsp; 包含在本地化应用程序中以编程方式使用的资源文件<br />
&nbsp; <br />
App_LocalResources<br />
&nbsp; .resx<br />
&nbsp; 包含页面范围的资源文件<br />
&nbsp; <br />
App_Themes<br />
&nbsp; .skin、.CSS、.xsl、附属文件<br />
&nbsp; 包含一组定义ASP.NET页面和控件外观的文件<br />
&nbsp; <br />
App_WebReferences<br />
&nbsp; .wsdl<br />
&nbsp; 包含用以生成代理类的WSDL文件，以及与在应用程序中使用Web服务有关的其他文件</p>]]></description>
					  </item><item>
						<title>C#中new和override区别</title>
						<link>http://www.w3pop.com/learn/view/doc/CSharp_new_override_method_differences/</link>
						<description><![CDATA[<div>　　在C#中实现重写方法，可以用new和override两个关键字来实现，究竟他们之间有什么区别呢？下面，我以例子来说明他们之间的微妙区别：</div>
<div style="border-right: blue 1px solid; border-top: blue 1px solid; border-left: blue 1px solid; border-bottom: blue 1px solid; background-color: #ffffe1"><br />
<font color="#0000ff">public&nbsp;class</font>&nbsp;GrandClass<font color="#339966"><font color="#008000">//基类</font><br />
</font>{<br />
<font color="#0000ff"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>public</font>&nbsp;GrandClass()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&quot;In&nbsp;GrandClass.Constructor&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff">public&nbsp;virtual&nbsp;void</font>&nbsp;Method()<font color="#008000">//用virtual才可以在子类中用override,而new不需要这样</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&quot;In&nbsp;GrandClass.Method()&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<font color="#0000ff">public&nbsp;class</font>&nbsp;ParentClass:GrandClass<font color="#008000">//继承基类,看看override状态<br />
</font>{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font>&nbsp;ParentClass()<br />
&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;Console.WriteLine(&quot;In&nbsp;ParentClass.Constructor&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public&nbsp;override&nbsp;void</font>&nbsp;Method()<font color="#008000">//使用override,是说把基类的方法重新定义<br />
</font>&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;Console.WriteLine(&quot;In&nbsp;ParentClass.Method()&nbsp;use&nbsp;override&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
<font color="#0000ff">public&nbsp;class</font>&nbsp;NewParentClass:GrandClass<font color="#008000">//继承基类,看看new状态</font><br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font>&nbsp;NewParentClass()<br />
&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;Console.WriteLine(&quot;In&nbsp;NewParentClass.Constructor&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">new&nbsp;public&nbsp;void</font>&nbsp;Method()<font color="#008000">//使用new,不是说用到基类的方法,而是重新定义一个子类方法,只不过,方法名称与基类相同</font><br />
&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;Console.WriteLine(&quot;In&nbsp;NewParentClass.Method()&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</div>
<p><br />
　　下面的调用代码:</p>
<div style="border-right: blue 1px solid; border-top: blue 1px solid; border-left: blue 1px solid; border-bottom: blue 1px solid; background-color: #ffffe1"><br />
<font color="#0000ff">static&nbsp;void</font>&nbsp;Main()&nbsp;<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GrandClass&nbsp;Parent=(GrandClass)<font color="#0000ff">new</font>&nbsp;ParentClass();<font color="#008000">//用override子类加框一个基类对象句柄<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parent.Method();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GrandClass&nbsp;NewParent=(GrandClass)<font color="#0000ff">new</font>&nbsp;NewParentClass();<font color="#008000">//用new子类加框一个基类对象句柄</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewParent.Method();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewParentClass&nbsp;NewParent1=<font color="#0000ff">new</font>&nbsp;NewParentClass();<font color="#008000">//一个子类句柄<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewParent1.Method();<br />
}</div>
<p><br />
　　结果是这样的:</p>
<div style="border-right: blue 1px solid; border-top: blue 1px solid; border-left: blue 1px solid; border-bottom: blue 1px solid; background-color: #ffffe1"><br />
<font color="#800080">[1]</font>In&nbsp;GrandClass.Constructor<br />
<font color="#800080">[2]</font>In&nbsp;ParentClass.Constructor<br />
<font color="#800080">[3]</font>In&nbsp;ParentClass.Method()&nbsp;use&nbsp;override<br />
<font color="#800080">[4]</font>In&nbsp;GrandClass.Constructor<br />
<font color="#800080">[5]</font>In&nbsp;NewParentClass.Constructor<br />
<font color="#800080">[6]</font>In&nbsp;GrandClass.Method()<br />
<font color="#800080">[7]</font>In&nbsp;GrandClass.Constructor<br />
<font color="#800080">[8]</font>In&nbsp;NewParentClass.Constructor<br />
<font color="#800080">[9]</font>In&nbsp;NewParentClass.Method()</div>
<p><br />
　　结果前的序号是我自己加的.为了以下的分析:<br />
<font color="#800080">　　[1]</font>,<font color="#800080">[2]</font>两句是GrandClass&nbsp;Parent=(GrandClass)<font color="#0000ff">new</font>&nbsp;ParentClass();的结果.(注意一下子类构建器与基类构建器的初始化顺序)<br />
<font color="#800080">　　[3]</font>是Parent.Method();结果.<br />
<font color="#800080">　　[4]</font>,<font color="#800080">[5]</font>两句是GrandClass&nbsp;NewParent=(GrandClass)<font color="#0000ff">new</font>&nbsp;NewParentClass();的结果.<br />
<font color="#800080">　　[6]</font>是NewParent.Method();的结果.<br />
<font color="#800080">　　[7]</font>,<font color="#800080">[8]</font>两句是GrandClass&nbsp;NewParent1=(GrandClass)<font color="#0000ff">new</font>&nbsp;NewParentClass();的结果.<br />
<font color="#800080">　　[9]</font>是NewParent1.Method();的结果.<br />
<br />
　　这里我们可以看到,同样是用子类的对象构造一个基类句柄.结果却很明显,可以看到<font color="#800080">[3]</font>和<font color="#800080">[6]</font>的区别.<font color="#800080">[3]</font>调用了子类的Method(),而<font color="#800080">[6]</font>调用了基类的Method().<br />
　　这说明,<font color="#0000ff">override</font>可以覆盖基类的方法,让基类的方法以子类的内容实现,而<font color="#0000ff">new</font>不用来覆盖基类的方法,而是全新定义一个子类的方法,这个方法只属于子类,与基类的方法无关,只是名字上相同而已.<br />
而这一例子的基础是建立在用子类对象加框成基类对象的,目的是实现用基类句柄调用子类方法,以实现重载的多形性.<br />
　　如果想调用子类的<font color="#0000ff">new</font>方法,用子类的句柄(绝对不能用基类句柄)来调用.结果<font color="#800080">[9]</font>可以看出来.<br />
　　用<font color="#0000ff">new</font>是在为子类定义方法名时,实在没有办法定义方法名的情况才与基类的方法相同,但这个方法只在子类中起到作用,而不影响基类的方法.也就是说,<font color="#0000ff">new</font>方法就是子类新定义的方法.用<font color="#0000ff">override</font>是直正意义上的重载.&nbsp;&nbsp;</p>
<div>&nbsp;</div>]]></description>
					  </item><item>
						<title>Javascript在IE和FireFox中的不同表现</title>
						<link>http://www.w3pop.com/learn/view/doc/js_ie_firefox_different_behave/</link>
						<description><![CDATA[<p><strong>1.document.formName.item(&quot;itemName&quot;) 问题<br />
</strong>说明:IE下,可以使用document.formName.item(&quot;itemName&quot;)或document.formName.elements[&quot;elementName&quot;];Firefox下,只能使用document.formName.elements[&quot;elementName&quot;]. <br />
解决方法:统一使用document.formName.elements[&quot;elementName&quot;].</p>
<p><strong>2.集合类对象问题</strong><br />
说明:IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象. <br />
解决方法:统一使用[]获取集合类对象.</p>
<p><strong>3.自定义属性问题<br />
</strong>说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性. <br />
解决方法:统一通过getAttribute()获取自定义属性.</p>
<p><strong>4.eval(&quot;idName&quot;)问题<br />
</strong>说明:IE下,,可以使用eval(&quot;idName&quot;)或getElementById(&quot;idName&quot;)来取得id为idName的HTML对象;Firefox下只能使用getElementById(&quot;idName&quot;)来取得id为idName的HTML对象. <br />
解决方法:统一用getElementById(&quot;idName&quot;)来取得id为idName的HTML对象.</p>
<p><strong>5.变量名与某HTML对象ID相同的问题</strong><br />
说明:IE下,HTML对象的ID可以作为document的下属对象变量名直接使用;Firefox下则不能.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。<br />
解决方法:使用document.getElementById(&quot;idName&quot;)代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义.</p>
<p><strong>7.input.type属性问题</strong><br />
说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写.</p>
<p><strong>9.event.x与event.y问题<br />
</strong>说明:IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性. <br />
解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.</p>
<p><strong>10.event.srcElement问题<br />
</strong>说明:IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性. <br />
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.</p>
<p><strong>13.frame问题<br />
</strong>以下面的frame为例：<br />
&lt;frame src=&quot;xxx.html&quot; id=&quot;frameId&quot; name=&quot;frameName&quot; /&gt;</p>
<p>(1)访问frame对象:<br />
IE:使用window.frameId或者window.frameName来访问这个frame对象.<br />
Firefox:只能使用window.frameName来访问这个frame对象.<br />
另外，在IE和Firefox中都可以使用window.document.getElementById(&quot;frameId&quot;)来访问这个frame对象.</p>
<p>(2)切换frame内容:<br />
在IE和Firefox中都可以使用window.document.getElementById(&quot;testFrame&quot;).src = &quot;xxx.html&quot;或window.frameName.location = &quot;xxx.html&quot;来切换frame的内容.</p>
<p>如果需要将frame中的参数传回父窗口，可以在frme中使用parent来访问父窗口。例如：parent.document.form1.filename.value=&quot;Aqing&quot;;</p>
<p><strong>14.body问题<br />
</strong>Firefox的body在body标签没有被浏览器完全读入之前就存在；而IE的body则必须在body标签被浏览器完全读入之后才存在.</p>
<p>例如： <br />
Firefox： <br />
&lt;body&gt; <br />
&lt;script type=&quot;text/javascript&quot;&gt; <br />
document.body.onclick = function(evt){ <br />
evt = evt || window.event; <br />
alert(evt); <br />
} <br />
&lt;/script&gt; <br />
&lt;/body&gt; <br />
IE&amp;Firefox： <br />
&lt;body&gt;<br />
&lt;/body&gt; <br />
&lt;script type=&quot;text/javascript&quot;&gt; <br />
document.body.onclick = function(evt){ <br />
evt = evt || window.event; <br />
alert(evt); <br />
} &lt;/script&gt;</p>
<p><strong>15. 事件委托方法<br />
</strong>IE：document.body.onload = inject; //Function inject()在这之前已被实现</p>
<p>Firefox：document.body.onload = inject();</p>
<p>有人说标准是：<br />
document.body.onload=new Function('inject()');</p>
<p><strong>16. firefox与IE(parentElement)的父元素的区别<br />
</strong>IE：obj.parentElement<br />
firefox：obj.parentNode</p>
<p>解决方法: 因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择.</p>
<p><strong>17.innerText在IE中能正常工作，但是innerText在FireFox中却不行.<br />
</strong>解决方法:<br />
if(navigator.appName.indexOf(&quot;Explorer&quot;) &gt; -1){</p>
<p>&nbsp;&nbsp;&nbsp; document.getElementById('element').innerText = &quot;my text&quot;;</p>
<p>} else{</p>
<p>&nbsp;&nbsp;&nbsp; document.getElementById('element').textContent = &quot;my text&quot;;</p>
<p>}</p>
<p><strong>18. FireFox中类似 obj.style.height = imgObj.height 的语句无效<br />
</strong>解决方法：<br />
obj.style.height = imgObj.height + 'px';</p>
<p><strong>19. ie,firefox以及其它浏览器对于 table 标签的操作都各不相同，在ie中不允许对table和tr的innerHTML赋值，使用js增加一个tr时，使用appendChile方法也不管用。<br />
</strong>解决方法：<br />
//向table追加一个空行：<br />
var row = otable.insertRow(-1);<br />
var cell = document.createElement(&quot;td&quot;);<br />
cell.innerHTML = &quot; &quot;; <br />
cell.className = &quot;XXXX&quot;; <br />
row.appendChild(cell);</p>
<p><strong>20. padding 问题<br />
</strong>padding 5px 4px 3px 1px FireFox无法解释简写,</p>
<p>必须改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px;</p>
<p><strong>21. 消除ul、ol等列表的缩进时<br />
</strong>样式应写成:list-style:none;margin:0px;padding:0px;</p>
<p>其中margin属性对IE有效，padding属性对FireFox有效</p>
<p><strong>22. CSS透明<br />
</strong>IE：filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。</p>
<p>FF：opacity:0.6。</p>
<p><strong>23. CSS圆角<br />
</strong>IE：不支持圆角。</p>
<p>FF： -moz-border-radius:4px，或者-moz-border-radius-topleft:4px;-moz-border- radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius- bottomright:4px;。</p>
<p><strong>24. CSS双线凹凸边框<br />
</strong>IE：border:2px outset;。</p>
<p>FF： -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;-moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080;</p>
<p><strong>25．ie支持document.all 而firefox 不支持</strong><br />
改用下面三个tag的其中一个来代替document.all <br />
getElementsByTagName(&quot;tagName&quot;) 可以得到得到所有标签元素的集合<br />
getElementById(&quot;idName&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以按id得到某一元素<br />
getElementsByName(&quot;Name&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以得到按name属性得到某一元素</p>
<p><strong>26、firefox 中使用innerHTML 的方法<br />
</strong>&lt;div id=&quot;online&quot;&gt;&lt;/div&gt;<br />
document.all.online.innerHTML; //这种方法在IE中可以使用，但不是标准方法<br />
document.getElementById(&quot;online&quot;).innerHTML; //这样firefox就能使用innerHTML了</p>
<p><strong>27、eval()与window.execScript()执行脚本<br />
</strong>IE、firerox均支持eval()，firefox不支持window.execScript()</p>
<p>解决：统一使用eval()</p>
<p><strong>28、对事件处理函数的重写<br />
</strong>解决：（例）:如对document的onclick()重写，统一使用document.onclick = function(){&hellip;}</p>]]></description>
					  </item><item>
						<title>IE和火狐读取XML方法比较</title>
						<link>http://www.w3pop.com/learn/view/doc/transform_XML/</link>
						<description><![CDATA[<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">一、IE读取XML<br />
</span><span style="font-family: 宋体">&nbsp;<font face="Arial">var xmlDoc;&nbsp;&nbsp;<br />
&nbsp;&nbsp;xmlDoc = new ActiveXObject( &quot;Msxml2.DOMDocument&quot; );<br />
&nbsp;&nbsp;xmlDoc.loadXML(xml);<br />
</font></span><span style="font-family: 宋体"><br />
//取的节点<br />
&nbsp;<font face="Arial">var points = xmlDoc.documentElement.getElementsByTagName(&quot;point&quot;);</font><br />
</span><span style="font-family: 宋体"><br />
//取得节点的内容值<br />
&nbsp;<font face="Arial">points<img alt="Idea [I]" src="http://www.spacebuilder.cn/Utility/Emoticons/emotion-55.gif" />.childNodes[1].text</font></span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">二</span><span style="font-family: Palatino-Roman">、firefox读取XML</span></p>
<p style="margin-top: 4.5pt; text-indent: 20pt"><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">中创建一个</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">，需要调用</span><span><span style="font-size: 9.5pt">document.implementation</span></span><span style="font-family: 宋体">对象的</span><span><span style="font-size: 9.5pt">createDocument()</span></span><span style="font-family: 宋体">方法。该方法接受三个参数：第一个参数是包含文档所使用的命名空间</span><span style="font-family: Palatino-Roman">URI</span><span style="font-family: 宋体">的字符串；第二个参数是包含文档根元素名称的字符串；第三个参数是要创建的文档类型（也称为</span><span style="font-family: Palatino-Roman">doctype</span><span style="font-family: 宋体">）。如果要创建空的</span><span style="font-family: Palatino-Roman">DOM</span><span style="font-family: 宋体">文档，则代码如下所示：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>var oXmlDom = document.implementation.createDocument(&quot;&quot;, &quot;&quot;, null);</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">前两个参数是空字符串，第三个参数为</span><span><span style="font-size: 9.5pt">null</span></span><span style="font-family: 宋体">，这样可以确保生成一个彻底的空文档。事实上，现在</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">中并不提供针对文档类型的</span><span style="font-family: Palatino-Roman">JavaScript</span><span style="font-family: 宋体">支持，所以第三个参数总是为</span><span><span style="font-size: 9.5pt">null</span></span><span style="font-family: 宋体">。如果要创建包含文档元素的</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">，那么可以在第二个参数中指定标签名称：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>var oXmlDom = document.implementation.createDocument(&quot;&quot;, &quot;books&quot;, null);</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">这段代码创建了一个</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">，其</span><span><span style="font-size: 9.5pt">documentElement</span></span><span style="font-family: 宋体">是</span><span><span style="font-size: 9.5pt">&lt;books/&gt;</span></span><span style="font-family: 宋体">。如果要创建包含指定命名空间的</span><span style="font-family: Palatino-Roman">DOM</span><span style="font-family: 宋体">，可以在第一个参数中指定命名空间</span><span style="font-family: Palatino-Roman">URI</span><span style="font-family: 宋体">：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>var oXmlDom = document.implementation.createDocument(&quot;http://www.site1.com&quot;,</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;books&quot;, null);</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">当在</span><span><span style="font-size: 9.5pt">createDocument()</span></span><span style="font-family: 宋体">方法中指定命名空间时，</span><span style="font-family: Palatino-Roman"> Firefox</span><span style="font-family: 宋体">会自动附上前缀</span><span><span style="font-size: 9.5pt">a0</span></span><span><span style="font-size: 9.5pt; font-family: 宋体">以表示</span></span><span style="font-family: 宋体">命名空间</span><span style="font-family: Palatino-Roman">URI</span><span style="font-family: 宋体">：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>&lt;a0:books xmlns:a0=&quot;http://www.site1.com&quot; /&gt;</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">接着，你可以通过程序来填充</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">文档，不过在一般情况下，还需要在空的</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">对象中载入现有的</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">文档。</span></p>
<p style="margin-top: 7.5pt; text-indent: 21pt"><span>1. </span><span style="font-family: 黑体">在</span><span>Firefox</span><span style="font-family: 黑体">中载入</span><span>XML</span><span style="font-family: 黑体">数据</span></p>
<p style="margin-top: 4.5pt; text-indent: 20pt"><span style="font-family: 宋体">在</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">中，将</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">载入</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">的方法和微软采用的方法大致相同，只存在一个显著区别：</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">只支持</span><span><span style="font-size: 9.5pt">load()</span></span><span style="font-family: 宋体">方法。因此，在这两种浏览器中载入外部</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">数据的代码是相同的：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>oXmlDom.load(&quot;books.xml&quot;);</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">与微软的</span><span style="font-family: Palatino-Roman">IE</span><span style="font-family: 宋体">一样，</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">同样实现了</span><span><span style="font-size: 9.5pt">async</span></span><span style="font-family: 宋体">属性，该属性的行为也与其一致：将</span><span><span style="font-size: 9.5pt">async</span></span><span style="font-family: 宋体">设置为</span><span><span style="font-size: 9.5pt">false</span></span><span style="font-family: 宋体">，表示以同步模式载入文档；否则，以异步模式载入文档。</span></p>
<p style="margin-top: 4.5pt; text-indent: 20pt"><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">的</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">实现和微软的</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">实现还存在另一个不同，即</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">不支持</span><span><span style="font-size: 9.5pt">readyState</span></span><span style="font-family: 宋体">属性及</span><span><span style="font-size: 9.5pt">onreadystatechange</span></span><span style="font-family: 宋体">事件处理函数。在</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">中，支持</span><span><span style="font-size: 9.5pt">load</span></span><span style="font-family: 宋体">事件和</span><span><span style="font-size: 9.5pt">onload</span></span><span style="font-family: 宋体">事件处理函数。在文档完全载入后将触发</span><span><span style="font-size: 9.5pt">load</span></span><span style="font-family: 宋体">事件：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>oXmlDom.load(&quot;books.xml&quot;);</span></p>
<p style="margin-right: 0.5pt"><span>oXmlDom.onload = function () {</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; <font face="Verdana">//</font></span><span style="font-family: 楷体_GB2312"><font face="Verdana">文档完全载入后的操作</font></span></p>
<p style="margin-right: 0.5pt"><span>};</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">正如前面所说，在</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">的</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">实现中，并没有</span><span><span style="font-size: 9.5pt">loadXML()</span></span><span style="font-family: 宋体">方法，不过通过</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">中的</span><span><span style="font-size: 9.5pt">DOMParser</span></span><span style="font-family: 宋体">类可以模拟</span><span><span style="font-size: 9.5pt">loadXML()</span></span><span style="font-family: 宋体">的行为。该类有一个名为</span><span><span style="font-size: 9.5pt">parseFromString()</span></span><span style="font-family: 宋体">的方法，用来载入字符串并解析成文档：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>var sXml = &quot;&lt;root&gt;&lt;person&gt;&lt;name&gt;Jeremy McPeak&lt;/name&gt;&lt;/person&gt;&lt;/root&gt;&quot;;</span></p>
<p style="margin-right: 0.5pt"><span>var oParser = new DOMParser();</span></p>
<p style="margin-right: 0.5pt"><span>var oXmlDom = oParser.parseFromString(sXml,&quot;text/xml&quot;);</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">在这段代码中，创建了一个</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">字符串，并作为参数传递给</span><span><span style="font-size: 9.5pt">DOMParser</span></span><span style="font-family: 宋体">的</span><span><span style="font-size: 9.5pt">parseFromString()</span></span><span style="font-family: 宋体">方法。</span><span><span style="font-size: 9.5pt">parseFromString()</span></span><span style="font-family: 宋体">方法的两个参数分别是</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">字符串和数据的内容类型（一般设置为</span><span><span style="font-size: 9.5pt">text/xml</span></span><span style="font-family: Palatino-Roman">)</span><span style="font-family: 宋体">。</span><span><span style="font-size: 9.5pt">parseFromString()</span></span><span style="font-family: 宋体">方法返回</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">对象，因此这里得到的</span><span><span style="font-size: 9.5pt">oXmlDom</span></span><span style="font-family: 宋体">与第一个例子相同。</span></p>
<p style="margin-top: 7.5pt; text-indent: 21pt"><span>2. </span><span style="font-family: 黑体">在</span><span>Firefox</span><span style="font-family: 黑体">中获取</span><span>XML</span><span style="font-family: 黑体">数据</span></p>
<p style="margin-top: 4.5pt; text-indent: 20pt"><span style="font-family: 宋体">尽管存在这样那样的不同，但</span><span style="font-family: Palatino-Roman">IE</span><span style="font-family: 宋体">和</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">中用于获取文档中</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">数据的大多数属性和方法是一致的。正如在</span><span style="font-family: Palatino-Roman">IE</span><span style="font-family: 宋体">中，可以使用</span><span><span style="font-size: 9.5pt">documentElement</span></span><span style="font-family: 宋体">属性来获取文档的根元素，例如：</span></p>
<p style="margin-top: 7.5pt"><span>var oRoot = oXmlDom.documentElement;</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: Palatino-Roman; letter-spacing: 0.2pt">Firefox</span><span style="font-family: 宋体; letter-spacing: 0.2pt">同样支持</span><span style="font-family: Palatino-Roman; letter-spacing: 0.2pt">W3C</span><span style="font-family: 宋体; letter-spacing: 0.2pt">标准属性，包括</span><span><span style="font-size: 9.5pt">childNodes</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">、</span><span><span style="font-size: 9.5pt">firstChild</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">、</span><span><span style="font-size: 9.5pt">lastChild</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">、</span><span><span style="font-size: 9.5pt">nextSibling</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">、</span><span><span style="font-size: 9.5pt">nodeName</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">、</span><span><span style="font-size: 9.5pt">nodeType</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">、</span><span><span style="font-size: 9.5pt">nodeValue</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">、</span><span><span style="font-size: 9.5pt">ownerDocument</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">、</span><span><span style="font-size: 9.5pt">parentNode</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">和</span><span><span style="font-size: 9.5pt">previousSibling</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">。不幸的是，对于微软专有的</span><span><span style="font-size: 9.5pt">text</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">和</span><span><span style="font-size: 9.5pt">xml</span></span><span style="font-family: 宋体; letter-spacing: 0.2pt">属性，</span><span style="font-family: Palatino-Roman; letter-spacing: 0.2pt">Firefox</span><span style="font-family: 宋体; letter-spacing: 0.2pt">并不支持，不过可以利用其他方法来模拟该属性的行为。</span></p>
<p style="margin-top: 4.5pt; text-indent: 20pt"><span style="font-family: 宋体">大家应该还记得，</span><span><span style="font-size: 9.5pt">text</span></span><span style="font-family: 宋体">属性返回了当前节点的内容，或者是当前节点及其子节点的内容。这不仅仅返回当前节点的文本，还有所有子节点的文本，因此要模拟该功能实现是十分容易的。下面这个简单的函数就能够完成该功能，该函数唯一的参数是一个节点：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>function getText(oNode) {</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; var sText = &quot;&quot;;</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; for (var i = 0; i &lt; oNode.childNodes.length; i++) {</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (oNode.childNodes<img alt="Idea [I]" src="http://www.spacebuilder.cn/Utility/Emoticons/emotion-55.gif" />.hasChildNodes()) {</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sText += getText(oNode.childNodes<img alt="Idea [I]" src="http://www.spacebuilder.cn/Utility/Emoticons/emotion-55.gif" />);</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sText += oNode.childNodes<img alt="Idea [I]" src="http://www.spacebuilder.cn/Utility/Emoticons/emotion-55.gif" />.nodeValue;</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; return sText;</span></p>
<p style="margin-right: 0.5pt"><span>}</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">在</span><span><span style="font-size: 9.5pt; letter-spacing: 0pt">getText()</span></span><span style="font-family: 宋体">函数中，</span><span><span style="font-size: 9.5pt; letter-spacing: 0pt">sText</span></span><span style="font-family: 宋体">变量用来保存获取的所有文本。接着对</span><span><span style="font-size: 9.5pt; letter-spacing: 0pt">oNode</span></span><span style="font-family: 宋体">的子节点使用</span><span><span style="font-size: 9.5pt; letter-spacing: 0pt">for</span></span><span><span style="font-size: 9.5pt; font-family: 宋体; letter-spacing: 0pt">循环</span></span><span style="font-family: 宋体">进行遍历，检查每个子节点是否包含子节点。如果有子节点，那么就将其</span><span><span style="font-size: 9.5pt; letter-spacing: 0pt">childNode</span></span><span style="font-family: 宋体">传给</span><span><span style="font-size: 9.5pt; letter-spacing: 0pt">getText()</span></span><span style="font-family: 宋体">函数，并进行同样的处理；如果没有子节点，那么将当前节点的</span><span><span style="font-size: 9.5pt; letter-spacing: 0pt">nodeValue</span></span><span style="font-family: 宋体">加到字符串中（对文本节点而言，这只是文本字符串）。处理了所有子节点后，该函数返回变量</span><span><span style="font-size: 9.5pt; letter-spacing: 0pt">sText</span></span><span style="font-family: 宋体">。</span></p>
<p style="margin-top: 4.5pt; text-indent: 20pt"><span style="font-family: Palatino-Roman">IE</span><span style="font-family: 宋体">中的</span><span><span style="font-size: 9.5pt">xml</span></span><span style="font-family: 宋体">属性将存放对当前节点包含的所有</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">进行序列化的结果。在</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">中，提供了一个名为</span><span><span style="font-size: 9.5pt">XMLSerializer</span></span><span style="font-family: 宋体">对象来完成这一功能。该对象提供一个使用</span><span style="font-family: Palatino-Roman">JavaScript</span><span style="font-family: 宋体">可访问的</span><span><span style="font-size: 9.5pt">serializeToString()</span></span><span style="font-family: 宋体">方法，使用该方法可以对</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">数据进行序列化。</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>function serializeXml(oNode) {</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; var oSerializer = new XMLSerializer();</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; return oSerializer.serializeToString(oNode);</span></p>
<p style="margin-right: 0.5pt"><span>}</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span><span style="font-size: 9.5pt">serializeXml()</span></span><span style="font-family: 宋体">函数以</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">节点作为参数，创建一个</span><span><span style="font-size: 9.5pt">XMLSerializer</span></span><span style="font-family: 宋体">对象，并将该节点传给</span><span><span style="font-size: 9.5pt">serializeToString()</span></span><span style="font-family: 宋体">方法。该方法将向调用者返回</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">数据的字符串表示。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 20pt"><span><span style="font-family: 楷体_GB2312">对于节点操作的</span>DOM</span><span><span style="font-family: 楷体_GB2312">方法，</span>Firefox</span><span><span style="font-family: 楷体_GB2312">与</span>IE</span><span><span style="font-family: 楷体_GB2312">大致相同。参见&ldquo;在</span>IE</span><span><span style="font-family: 楷体_GB2312">中操作</span>DOM</span><span><span style="font-family: 楷体_GB2312">&rdquo;小节。</span></span></p>
<p style="margin-top: 7.5pt; text-indent: 21pt"><span>3. </span><span style="font-family: 黑体">在</span><span>Firefox</span><span style="font-family: 黑体">中处理错误</span></p>
<p style="margin-top: 4.5pt; text-indent: 20pt"><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">与</span><span style="font-family: Palatino-Roman">IE</span><span style="font-family: 宋体">的错误处理并不一样。当</span><span style="font-family: Palatino-Roman">IE</span><span style="font-family: 宋体">遇到错误时，它会填充</span><span><span style="font-size: 9.5pt">parseError</span></span><span style="font-family: 宋体">对象；而当</span><span style="font-family: Palatino-Roman">Firefox</span><span style="font-family: 宋体">遇到错误时，它会将包含错误信息的</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">文档载入到</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">文档中。看下面的这个例子：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>var sXml = &quot;&lt;root&gt;&lt;person&gt;&lt;name&gt;Jeremy McPeak&lt;/name&gt;&lt;/root&gt;&quot;;</span></p>
<p><span>var oParser = new DOMParser();</span></p>
<p><span>var oXmlDom = oParser.parseFromString(sXml,&quot;text/xml&quot;);</span></p>
<p><span>&nbsp;</span></p>
<p><span>if (oXmlDom.documentElement.tagName != &quot;parsererror&quot;) {</span></p>
<p><span>&nbsp;&nbsp;&nbsp; //</span><span style="font-family: 楷体_GB2312">没有错误发生，进行所需操作</span></p>
<p><span>} else {</span></p>
<p><span>&nbsp;&nbsp;&nbsp; alert(&quot;An Error Occurred&quot;);</span></p>
<p><span>}</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">在突出显示的代码行中，你会发现其中将产生一个错误：</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">字符串格式不正确（因为</span><span><span style="font-size: 9.5pt">&lt;person&gt;</span></span><span style="font-family: 宋体">元素不完整，没有相应的</span><span><span style="font-size: 9.5pt">&lt;/person&gt;</span></span><span style="font-family: 宋体">元素）。当载入错误的</span><span style="font-family: Palatino-Roman">XML</span><span style="font-family: 宋体">时，</span><span style="font-family: Palatino-Roman">XML DOM</span><span style="font-family: 宋体">对象将会载入一个</span><span><span style="font-size: 9.5pt">documentElement</span></span><span style="font-family: 宋体">为</span><span><span style="font-size: 9.5pt">&lt;parsererror/&gt;</span></span><span style="font-family: 宋体">的错误文档。我们可以通过检查</span><span><span style="font-size: 9.5pt">documentElement</span></span><span style="font-family: 宋体">的</span><span><span style="font-size: 9.5pt">tagName</span></span><span style="font-family: 宋体">属性来很容易地确定是否发生错误。如果</span><span><span style="font-size: 9.5pt">tagName</span></span><span style="font-family: 宋体">属性不是</span><span><span style="font-size: 9.5pt">parsererror</span></span><span style="font-family: 宋体">，就可以确定没有发生任何错误。</span></p>
<p style="margin-top: 4.5pt; text-indent: 20pt"><span style="font-family: 宋体">在本例中，可能会生成如下所示的错误文档：</span><span style="font-family: Palatino-Roman"> </span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>&lt;parsererror xmlns=&quot;http://www.mozilla.org/newlayout/xml/parsererror.xml&quot;&gt;XML</span></p>
<p style="margin-right: 0.5pt"><span>Parsing Error: mismatched tag. Expected: &lt;/person&gt;.</span></p>
<p style="margin-right: 0.5pt"><span>Location: http://yoda/fooreader/test.htm</span></p>
<p style="margin-right: 0.5pt"><span>Line Number 1, Column 43:&lt;sourcetext&gt;&lt;root&gt;&lt;person&gt;&lt;name&gt;Jeremy</span></p>
<p style="margin-right: 0.5pt"><span>McPeak&lt;/name&gt;&lt;/root&gt;</span></p>
<p style="margin-right: 0.5pt"><span>------------------------------------------^&lt;/sourcetext&gt;&lt;/parsererror&gt;</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">所有的错误信息都包含在错误文档的文本中。如果要通过程序使用这些错误信息，那么首先就要对其进行解析。最简单的方法是使用一个稍长的正则表达式：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>var reError = /&gt;([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; (\d+):&lt;sourcetext&gt;([\s\S]*?)(?:\-*\^)/;</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">该正则表达式将错误文档分为五个部分：错误消息、发生错误的文件名、行号、该行中发生错误的位置，以及发生错误的源代码。使用正则表达式对象的</span><span><span style="font-size: 9.5pt">test()</span></span><span style="font-family: 宋体">方法可以使用这些信息：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>if (oXmlDom.firstChild.tagName != &quot;parsererror&quot;) {</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; //</span><span style="font-family: 楷体_GB2312">没有错误发生，进行所需操作</span></p>
<p style="margin-right: 0.5pt"><span>} else {</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; var oXmlSerializer = new XMLSerializer();</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; var sXmlError = oXmlSerializer.serializeToString(oXmlDom);</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; var reError = /&gt;([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (\d+):&lt;sourcetext&gt;([\s\S]*?)(?:\-*\^)/;</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; reError.test(sXmlError);</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">正则表达式捕获到的第一部分数据是错误消息，第二部分是文件名，第三部分是行号，第四部分是行内位置，第五部分是源码。你可以使用这些解析后的信息来创建自定义的错误消息：</span></p>
<p style="margin: 7.5pt 0.5pt 0pt 1.4pt"><span>var str = &quot;An error occurred!! &quot; +</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; &quot;Description: &quot; + RegExp.$1 + &quot; &quot; +</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; &quot;File: &quot; + RegExp.$2 + &quot; &quot; +</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; &quot;Line: &quot; + RegExp.$3 + &quot; &quot; +</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; &quot;Line Position: &quot; + RegExp.$4 + &quot; &quot; +</span></p>
<p style="margin-right: 0.5pt"><span>&nbsp;&nbsp;&nbsp; &quot;Source Code: &quot; + RegExp.$5;</span></p>
<p style="margin-right: 0.5pt"><span>alert(str);</span></p>
<p style="margin-top: 4.5pt; text-indent: 0cm"><span style="font-family: 宋体">如果发生错误，那么</span><span><span style="font-size: 9.5pt">alert()</span></span><span style="font-family: 宋体">方法会以易于阅读的格式在警告框中来显示相关的错误信息。</span></p>]]></description>
					  </item><item>
						<title>xml 文档树</title>
						<link>http://www.w3pop.com/learn/view/doc/xml_tree/</link>
						<description><![CDATA[<p class="intro">XML documents form a tree structure that starts at &quot;the root&quot; and branches to &quot;the leaves&quot;.<br />
XML 文档树起始于&ldquo;根元素&rdquo;，并以此为基础扩展文档的分支结构。</p>
<hr />
<h2>An Example XML Document<br />
下面举一个XML文档案例</h2>
<p>XML documents use a self-describing and simple syntax:<br />
XML 文档使用一种相对简单的自述性语法：</p>
<table class="ex" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td>
            <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;note&gt;
&lt;to&gt;Tove&lt;/to&gt;
&lt;from&gt;Jani&lt;/from&gt;
&lt;heading&gt;Reminder&lt;/heading&gt;
&lt;body&gt;Don't forget me this weekend!&lt;/body&gt;
&lt;/note&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<p>The first line is the XML declaration. It defines the XML version (1.0) and the encoding used (ISO-8859-1 = Latin-1/West European character set).&nbsp;<br />
代码的第一行对XML文档做出了声明。它定义了XML版本号（1.0）以及文档所使用的字符编码（ISO-8859-1：拉丁文/西欧字符集）。</p>
<p>The next line describes the <strong>root element </strong>of the document (like saying: &quot;this document is a note&quot;):&nbsp;<br />
接下来的一行定义了文档的<strong>根元素</strong>（指明该文档是一份便条）：</p>
<table class="ex" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td>
            <pre>&lt;note&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<p>The next 4 lines describe 4 <strong>child elements</strong> of the root (to, from, heading, and body):<br />
再接下去的4行定义了根元素的<strong>4个子元素</strong>，分别是&ldquo;to&rdquo;、&ldquo;form&rdquo;、&ldquo;heading&rdquo;和&ldquo;body&rdquo;：</p>
<table class="ex" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td>
            <pre>&lt;to&gt;Tove&lt;/to&gt;
&lt;from&gt;Jani&lt;/from&gt;
&lt;heading&gt;Reminder&lt;/heading&gt;
&lt;body&gt;Don't forget me this weekend!&lt;/body&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<p>And finally the last line defines the end of the root element:<br />
文档的最后一行定义了根元素的结束标签：</p>
<table class="ex" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td>
            <pre>&lt;/note&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<p>You can assume, from this example, that the XML document contains a note to Tove from Jani.<br />
举个例子来说，你可以假设这份XML文档是Jani递交给Tove的一张便条。</p>
<p>Don't you agree that XML is pretty self-descriptive?<br />
通过上述案例，对于XML是一种完美的自述性语言这点应该毋庸置疑了吧？</p>
<hr />
<h2>XML Documents Form a Tree Structure<br />
XML 树状结构文档</h2>
<p>XML documents must contain a <strong>root element</strong>. This element is &quot;the parent&quot; of all other elements.<br />
XML 文档必须包含一个<strong>根元素</strong>。这个根元素是其它所有元素的&ldquo;父元素&rdquo;。</p>
<p>The elements in an XML document form a document tree. The tree starts at the root and branches to the lowest level of the tree.<br />
这些元素位于XML树状结构文档内。树状结构起始于根元素，并向更低级别的树状分支结构扩展。</p>
<p>All elements can have sub elements (child elements):<br />
文档中所有的元素都可以包含二级元素（即：子元素）：</p>
<table class="ex" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td>
            <pre>&lt;root&gt;
  &lt;child&gt;
    &lt;subchild&gt;.....&lt;/subchild&gt;
  &lt;/child&gt;
&lt;/root&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<p>The terms parent, child, and sibling are used to describe the relationships between elements. Parent elements have children. Children on the same level are called siblings (brothers or sisters).<br />
这里提到的一些术语，如：父元素、子元素、同级元素使用与描述元素之间的相互关系的。父元素包含子元素；和子元素同级的称为同级元素（或兄弟、姐妹元素）。</p>
<p>All elements can have text content and attributes (just like in HTML).<br />
所有的元素都包含文本内容和属性（这点和HTML极其类似）。</p>
<hr />
<h2>Example:<br />
案例：</h2>
<p><a href="/public/images/nodetree.gif"><img height="275" alt="DOM node tree" width="486" border="0" src="/public/images/nodetree.gif" /></a></p>
<p>The image above represents one book in the XML below:<br />
上述图表代表了下述XML文档中的一本书：</p>
<table class="ex" id="table1" cellspacing="0" cellpadding="0" width="100%" border="1">
    <tbody>
        <tr>
            <td>
            <pre>&lt;bookstore&gt;
&lt;book category=&quot;COOKING&quot;&gt;
  &lt;title lang=&quot;en&quot;&gt;Everyday Italian&lt;/title&gt; 
  &lt;author&gt;Giada De Laurentiis&lt;/author&gt; 
  &lt;year&gt;2005&lt;/year&gt; 
  &lt;price&gt;30.00&lt;/price&gt; 
&lt;/book&gt;
&lt;book category=&quot;CHILDREN&quot;&gt;
  &lt;title lang=&quot;en&quot;&gt;Harry Potter&lt;/title&gt; 
  &lt;author&gt;J K. Rowling&lt;/author&gt; 
  &lt;year&gt;2005&lt;/year&gt; 
  &lt;price&gt;29.99&lt;/price&gt; 
&lt;/book&gt;
&lt;book category=&quot;WEB&quot;&gt;
  &lt;title lang=&quot;en&quot;&gt;Learning XML&lt;/title&gt; 
  &lt;author&gt;Erik T. Ray&lt;/author&gt; 
  &lt;year&gt;2003&lt;/year&gt; 
  &lt;price&gt;39.95&lt;/price&gt; 
&lt;/book&gt;
&lt;/bookstore&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<p>The root element in the example is &lt;bookstore&gt;. All &lt;book&gt; elements in the document are contained within &lt;bookstore&gt;.<br />
案例中的根元素是&lt;bookstore&gt;。文档内所有的&lt;book&gt;元素都位于&lt;bookstore&gt;内。</p>
<p>The &lt;book&gt; element has 4 children: &lt;title&gt;,&lt; author&gt;, &lt;year&gt;, &lt;price&gt;.<br />
与此同时，&lt;book&gt;元素还包含了4个子元素：&lt;title&gt;、&lt; author&gt;、&lt;year&gt;、&lt;price&gt;。</p>]]></description>
					  </item><item>
						<title>网站设计原理</title>
						<link>http://www.w3pop.com/learn/view/doc/Basic_Design_Principles/</link>
						<description><![CDATA[<p><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><img width="201" height="141" align="right" src="/public/upload/image/Basic-Design-Principles(1).jpg" alt="Basic_Design_Principles" />Tone and Texture</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> <br />
</span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">色调与结构</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
This specifically applies to drawings more than photography, but tone and texture are very important. Tone refers to shading of light and dark on an object and texture is the visual and tactile surface characteristics of an object.<br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">色调与结构确实很重要，图片比照片更能运用此项内容。色调涉及到阴影以及物体颜色光亮程度；结构涉及到物体的外观特征。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
Here's a list of things that affect the tone and texture of an objects appearance. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">下面介绍影响网站色调与结构的几个因素。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
<strong>1.</strong> The direction from which the light is coming. (Left, right, above, behind, or below.) <br />
<strong style=""><br />
1.</strong> </span><span style="font-size: 9pt; font-family: 宋体;">光的方向。（左、右、上、下、后）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
<strong>2.</strong> The intensity of the light. (Candlelight or sunlight.) <br />
<br />
<strong style="">2. </strong></span><span style="font-size: 9pt; font-family: 宋体;">光的亮度。（烛光或者阳光）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
<strong>3.</strong> The type of light (Light from the setting sun or flash.) <br />
<br />
<strong style="">3. </strong></span><span style="font-size: 9pt; font-family: 宋体;">光的类型。（落日还是烈日）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
<strong>4.</strong> Objects standing between the light source and your subject or object. (Light passing through a thin fabric.) <br />
<br />
<strong style="">4. </strong></span><span style="font-size: 9pt; font-family: 宋体;">站立在光源之间的物体。（光穿过物体）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
<strong>5.</strong> The color and texture of the object. (A fuzzy blanket looks a lot different than a piece of granite.) <br />
<br />
<strong style="">5. </strong></span><span style="font-size: 9pt; font-family: 宋体;">物体的颜色与结构。（绒毛毯子与花岗岩不同）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
<strong>Light and Shade</strong> <br />
</span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">光线与阴影</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
Light always travels in a straight line and depending on the location of the light the object or subject can look dramatically different. To understand this principle get a roll of film a light source, a lamp, an object or a family member. Take a series of photos of your subject start with the light source at twelve o'clock take each successive photo moving the light source to each position on the clock. When you look at your photos you will be amazed at how different your subject looks in each image. This exercise is great for anyone wanting to understand how light changes the look of a subject. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">光沿直线传播，光的位置不同，网站中的物体或者要表达主题就会显著不同。了解到这个内容之后，在现在的光源下，拍摄照片（物体、家人都可以），然后在中午</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">12</span><span style="font-size: 9pt; font-family: 宋体;">点钟的时候，再次拍摄同一张图片。观察图片时，你会惊奇地发现图片差异很大。你可以根据这个情况，清楚理解光源对照片的影响。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
<strong>Shade</strong> <br />
</span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">对比程度</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Shade or shadow and more commonly known as contrast is the degree of difference between the light and dark areas. An image with very black blacks and very light whites has high contrast. An image that is mostly shades of gray has low contrast. Contrast is determined by the intensity of the light source. Adjusting the contrast can help you create a very realistic image or a fantastic one. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">我们经常看到的光与阴暗区域的对比程度，就是对比阴影了。黑色、白色图片的对比很明显，而灰色梯度的对比就比较弱。光源强度决定对比程度，而对比程度会决定图片的现实性或者科幻性。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
If you have some specific questions please visit my Photography and Design Forum at: <a target="_blank" href="http://kellypaalphotography.com/v-web/bulletin/bb/index.php">Kellypaalphotography.com Bulletin</a> and post your question there. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">如果还有其它问题，登录</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><a target="_blank" href="http://kellypaalphotography.com/v-web/bulletin/bb/index.php">Kellypaalphotography.com Bulletin</a></span><span style="font-size: 9pt; font-family: 宋体;">的&ldquo;图片与设计&rdquo;论坛，你可以在那里提出相关问题。</span></p>]]></description>
					  </item><item>
						<title>别具一格的网站评论</title>
						<link>http://www.w3pop.com/learn/view/doc/Exclusive_Website_Review/</link>
						<description><![CDATA[<p align="left" class="MsoNormal" style="text-align: left;"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><img width="132" height="130" align="right" alt="Exclusive_Website_Review" src="/public/upload/image/Lee.jpg" />Welcome to Old America, famous for its great events, innumerable opportunities and of course the old but surprisingly stylish and strong Lee jeans. We say jeans but think Lee; say Lee, and subconsciously think jeans. And of course our thoughts about the jeans are inextricably linked to the era which spawned them. So naturally the entire site is impeccably done in the style of American Retro &ndash; soft pastel tones, styled photography and illustrations. Every detail in the design reminds one of the old ragged jeans. Bearing all of this in mind separately, I will start my review of the site by listing its advantages and disadvantages. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">美国历史上曾经发生过很多大事件，也曾经出现了很多震惊世界的发明，这篇文章介绍产生于美国、享誉世界的牛仔品牌：</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee jeans</span><span style="font-size: 9pt; font-family: 宋体;">。我们说到牛仔，就会想到</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">；说道</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">，潜意识里会想到牛仔。当然，我们会自然联想到出售</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">牛仔服装的商店、网站。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">网站完全根据美国风格设计，包括柔和的语调、有特色的照片以及说明，每一个细节都使人联想到</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">牛仔。下面根据网站特点，我会逐步介绍其优点与缺点。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br clear="all" />
<br />
I'm not a monster, though I work at (</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">you know where</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">), and that's why I'll start with what I like about this site:<br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">尽管我对网站设计有点研究，但并不是权威专家，所以我从网站的优点开始谈起。</span><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></strong></p>
<ul type="disc">
    <li class="MsoNormal" style="text-align: left;"><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Cohesiveness      of design</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> - the entire site      is done in one style, from the font to the illustrations <br />
    <br />
    </span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">设计的连贯性</span></strong><span style="font-size: 9pt; font-family: 宋体;">&mdash;&mdash;从字体到说明，网站保持一种风格。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li class="MsoNormal" style="text-align: left;"><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Branding</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> - the site calls to mind subconscious      associations and other connections with images of the brand itself <br />
    <br />
    </span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">品牌</span></strong><span style="font-size: 9pt; font-family: 宋体;">&mdash;&mdash;网站的所有内容，都可以使人想起</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">品牌。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li class="MsoNormal" style="text-align: left;"><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Consistency      of look and feel </span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">-      practically all of the sites in the <a href="http://www.leejeans.com/leesites.asp" target="_blank">Lee family</a>      have their own unique design but at the same time give the same atmosphere      of reliability and quality, which are the main features of the brand <br />
    <br />
    </span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">外观的一致性</span></strong><span style="font-size: 9pt; font-family: 宋体;">&mdash;&mdash;所有网站（</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><a href="http://www.leejeans.com/leesites.asp" target="_blank">Lee family</a></span><span style="font-size: 9pt; font-family: 宋体;">）设计各具特色，但都可以给人可靠感、信赖感。所有品牌都应该具有这种特征。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li class="MsoNormal" style="text-align: left;"><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Clarity      of purpose</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> - the site      demonstrates clear cut delineation of ages and sizes bearing in mind the      target audience, on whom it is oriented. <br />
    <br />
    </span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">明确的目的</span></strong><span style="font-size: 9pt; font-family: 宋体;">&mdash;&mdash;网站针对不同年龄段、不同爱好的消费者，设计了不同的内容。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
</ul>
<p align="left" class="MsoNormal" style="text-align: left;"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">It's good to be a kind boy, but to be an honest boy is even better. Though the site has been declared the site of the month, it does have some faults. Well, there's no pretty way to say it. Here's what I dislike about the site:<br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">善良很可贵，但诚实更重要。尽管网站目的明确，但也有许多设计缺点。当然，并没有十全十美的网站设计，下面介绍一下网站的几个缺点：</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></p>
<ul type="disc">
    <li class="MsoNormal" style="text-align: left;"><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Open      links</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> - It was a big surprise for      me to discover that Lee brand has 10 other sites, which are dedicated to      various small tasks, like www.leelocator.com which serves to detect the      local stores of the company. These sites and some others, by the way,      regularly appears in the left bar though they are not identified in any      way and looks like all the other inner links. I think that notifying users      before they will leave the site would be a good idea. Check the four links      in the &ldquo;<a href="http://www.leejeans.com/product-categories.asp?group=misses" target="_blank">Browse Lee Products</a>&rdquo; section, all of them leads to the      four different sites. <br />
    <br />
    </span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">过多的链接</span></strong><span style="font-size: 9pt; font-family: 宋体;">&mdash;&mdash;我很惊奇地发现，</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">还有另外</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">10</span><span style="font-size: 9pt; font-family: 宋体;">家网站，各个网站的任务都不同，例如，</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">www.leelocator.com</span><span style="font-size: 9pt; font-family: 宋体;">方便用户寻找公司本地商店。这些网站一般会出现在网页左边的菜单栏附近，尽管它们看起来更像是内部链接</span><span style="font-size: 9pt; font-family: Verdana;"> </span><span style="font-size: 9pt; font-family: 宋体;">。在</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><a href="http://www.leejeans.com/product-categories.asp?group=misses" target="_blank">Browse Lee Products</a></span><span style="font-size: 9pt; font-family: 宋体;">板块，你可以看到这四个链接，用户可以通过链接进入四个不同的网站。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li class="MsoNormal" style="text-align: left;"><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Errors</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> - Clicking on the banner Win Ultimate Jeans, I      encountered a mistake: &ldquo;Registration Form Error. The registration form      hyperlink has invalid parameters. Please make sure that a valid site name      and campaign name have been specified.&rdquo; <br />
    <br />
    </span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">错误</span></strong><span style="font-size: 9pt; font-family: 宋体;">&mdash;&mdash;点击横幅</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Win Ultimate Jeans</span><span style="font-size: 9pt; font-family: 宋体;">以后，你会发现一个错误：登记表格出错。登记表格链接出现无效参量，确保使用有效网站名以及活动名。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li class="MsoNormal" style="text-align: left;"><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Mysterious      Sounding Menu Items</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> - It      took me a long time to decide if it's worth it to click on the menu item      &ldquo;The Scoop,&rdquo; as it's almost impossible to guess where I will find myself      after clicking on it. Then, recalling that I was writing an review, I      clicked. Camel Trophies' routes sometimes seem to be less surprising. But      I'm not about my life, so let's get back to the site: online games and      other entertaining information was hidden under &ldquo;The Scoop&rdquo; - this was a      little bit scary, a little bit tempting and a very confusing link. It's      not an easy task to name sections of the site especially when the desire      to be original is stronger than the need to be easy-to-understand.      Confusing section names can spoil all the work done; this is the case when      the only word is of great value in all senses. By the way, on the main      menu sections &ldquo;Juniors,&rdquo; &ldquo;Boys,&rdquo; and &ldquo;Girls&rdquo; no special inviting banners      can be found, though I really doubt that such kind of stuff is of no value      to increase the loyalty of young customers any more. <br />
    <br />
    </span><strong style=""><span style="font-size: 9pt; font-family: 宋体;">神秘的菜单选项</span></strong><span style="font-size: 9pt; font-family: 宋体;">&mdash;&mdash;我花费了很长时间确定是否点击</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">&ldquo;The      Scoop&rdquo;</span><span style="font-size: 9pt; font-family: 宋体;">菜单，因为我不清楚点击之后出现什么内容，但想到我要写评论，我点击了这个菜单。点击之后，虽然没有太多惊讶，但我感到疑惑，所有在线游戏以及娱乐信息都出现在此项菜单中。他们可以运用其它菜单，呈现这些内容，那样还更便于网站用户理解菜单。令人疑惑的菜单名称毁掉了整个网站，这可以说明一个单词可以具备很大的价值。同时在</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">&ldquo;Juniors&rdquo; </span><span style="font-size: 9pt; font-family: 宋体;">、</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">&ldquo;Boys&rdquo;</span><span style="font-size: 9pt; font-family: 宋体;">、</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> &ldquo;Girls&rdquo;</span><span style="font-size: 9pt; font-family: 宋体;">菜单中，内容缺乏吸引力，我真的怀疑这些内容是否可以增加青少年消费者对</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">牛仔的忠诚度。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li class="MsoNormal" style="text-align: left;"><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Cookie      Woes</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"> - Be careful on entering      the site; if you choose &ldquo;Enter US Version of <st1:place w:st="on"><st1:placename w:st="on">Lee</st1:placename> <st1:placename w:st="on">Website</st1:placename></st1:place>&rdquo;      it will take you lots of time and efforts if you would like to visit      either the European or the Asian version of the site after visiting the      American one. The cookie will fight to the utmost not to show you the      splash page where you can choose which version to visit. Even typing <a href="http://www.leejeans.com/" target="_blank">www.leejeans.com</a> in      the address bar of your browser won't help. Since cookies can't be      compared to humans, they were deleted and I got the European version of      the site <a href="http://www.lee.be/" target="_blank">www.lee.be</a> &hellip;      Maybe it was not a good idea to kill cookies? Check it yourself.<br />
    <br />
    <strong>Cookie</strong></span><strong><span style="font-size: 9pt; font-family: 宋体;">的悲哀</span></strong><span style="font-size: 9pt; font-family: 宋体;">&mdash;&mdash;在点击&ldquo;进入</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Lee</span><span style="font-size: 9pt; font-family: 宋体;">网站&rdquo;之后，如果首先浏览美国网站，那么进入欧洲或者亚洲网站时，会出现一些麻烦。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Cookie</span><span style="font-size: 9pt; font-family: 宋体;">会阻止进入页面的呈现，这样你就不能选择其它版本，即使在地址栏中键入</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><a href="http://www.leejeans.com/" target="_blank">www.leejeans.com</a></span><span style="font-size: 9pt; font-family: 宋体;">，浏览器也没有反应。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Cookies</span><span style="font-size: 9pt; font-family: 宋体;">与人类不同，我们可以删除它，进入欧洲网站。或许这也不是好办法，你自己考虑一下。<br />
    <br />
    <img width="400" height="302" alt="Exclusive_Website_Review" src="/public/upload/image/lee_usa-small.jpg" />（美国）<br />
    <br />
    <img width="400" height="372" alt="Exclusive_Website_Review" src="/public/upload/image/lee_europe-small.jpg" />（欧洲）<br />
    <br />
    <img width="400" height="243" alt="Exclusive_Website_Review" src="/public/upload/image/lee_asia-small.gif" />（亚洲）<br />
    </span>
    <p align="left" class="MsoNormal" style="text-align: left;"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Regional sites are not the objects of this review, though I would like to note that the sites were developed with different design, navigation and usability approaches. I'm far away from realizing what the purpose of it was but I can admit that the task for site development was given by different (regional) offices to different contractors without developing and using as well the only web design policy before. <br />
    <br />
    </span><span style="font-size: 9pt; font-family: 宋体;">地域性网站并不是这篇文章需要介绍的内容，尽管我想要强调，地域性网站开发需要运用不同的设计、导航，可用性也不相同。尽管我还没有清楚这样做的目的，但我可以确定不同的设计者或者设计公司，会应用不同的设计方法。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
    <br />
    The American version of the site has numerous advantages from a design point of view, using attributes of styles and portrayals of distinctive atmospheres associated with the brand. <br />
    <br />
    </span><span style="font-size: 9pt; font-family: 宋体;">从设计角度来说，网站的美国版本具有的优点更多。这个网站的特征、形式以及外观与此品牌联系密切。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
    <br />
    From the point of view of e-commerce &ndash; the site has very many disadvantages and cannot be considered well-optimized or sales promotion oriented. Taking into consideration the massive assortment and international status of the brand, as well as the foundation of my experience exploring other sites, I can pronounce the verdict that this site was done to promote offline marketing efforts of the company. <br />
    <br />
    </span><span style="font-size: 9pt; font-family: 宋体;">从电子网站的角度来说，这个网站具有太多缺点，并没有很好地发挥促销作用。考虑到分类多、品牌知名度高，以及我研究网站的经验，我敢断定，网站更有利于实体商店销售，而不是网站销售。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
    <br />
    However, the site has vast untapped potential to be converted into an online sales generation machine. <br />
    <br />
    </span><span style="font-size: 9pt; font-family: 宋体;">我相信，利用网站进行网上销售的潜力很大。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></p>
    <span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span>  <span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
</ul>]]></description>
					  </item><item>
						<title>利用.htaccess控制网站</title>
						<link>http://www.w3pop.com/learn/view/doc/Gain_More_Web_Site_Control_With_htaccess/</link>
						<description><![CDATA[<p align="left" style="margin-right: 19.2pt; text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><img width="199" height="149" align="right" src="/public/upload/image/Control With htaccess.jpg" alt="Gain_More_Web_Site_Control_With_htaccess" />There are many tools of the trade in the world of Web site development, but very few have as many good uses as your .htaccess file. What, you don't have one? I'll admit, information on these little darlings are confusing to some and hard to find. Hence the reason why we need an explanation of what it is and what it can do for you. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">网站开发工具很多，</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件是很好用的一种，你是否想拥有呢？我知道，有些人难以理解这个内容，并且很难找到关于这个问题的说明，所以这篇文章将会解释</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess </span><span style="font-size: 9pt; font-family: 宋体;">文件是什么，以及它有什么作用。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
Inside your Web hosting space, you know you have folders, HTML documents, and other things that make your Web site work. Think of this file as just another addition to the many thing you have inside there. It usually sits inside your root directory, such as &quot;/public_html/&quot; and has more than a few good uses. You might already have a .htaccess file in your root directory. If so, all you need to do is edit that one. Just remember that if it is in your root directory, that it will effect all folders and documents inside that directory. If you want to over ride that, then you will have to make a new .htaccess file inside the directory in question. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">在网站虚拟主机空间中，存在文件夹、</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">HTML</span><span style="font-size: 9pt; font-family: 宋体;">文件以及其它保证网站运行的内容。你可以把这个文件想象成虚拟主机内部其它文件的另一个附加品，通常位于根目录中（比如</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">&quot;/public_html/&quot;</span><span style="font-size: 9pt; font-family: 宋体;">），用途有很多。假如根目录中已经存在一个</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件，你需要进行编辑。但请记住：如果文件存在于根目录中，修改根目录会影响根目录中的所有文件夹以及文件。如果希望在不影响其它内容的情况下修改，你需要在根目录中建立一个新的</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
For an example, if you want what is in the .htaccess file to effect everything but your &quot;photos&quot; folder then you would have to create a new .htaccess file inside your &quot;photos&quot; folder. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">比如说，你希望</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件影响除去照片外的其它内容，你就需要在&ldquo;照片&rdquo;文件夹中建立新的</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
How can you create one? Well, depending on the FTP program you are using it should be as easy as creating a new document, then renaming it .htaccess. Note that it has nothing coming before the dot. If you have anything in front of the dot, then it will not be read by the Web hosting server as a .htaccess file. The server will not know what to do with it. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">如何创建</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件呢？你可以利用</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">FTP</span><span style="font-size: 9pt; font-family: 宋体;">程序，很容易创建出新文件，然后重命名</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">。请注意：文件名中点的前面不能出现任何内容，否则虚拟主机服务器不会把其看作是</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件，服务器也就不知道如何处理这个文件。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
If you want to create the file on your computer first, you should be able to right-click your desktop and select &quot;New&quot; then &quot;Text Document&quot;. Then right-click that document on your desktop, and go to &quot;Rename&quot;. Type in the new name as &quot;.htaccess&quot;. Some programs might put the .txt extension on it automatically. All you have to do is go in to rename it again, and take that part off. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">如果你希望首先在计算机中创建这个文件，你应该首先进入桌面，选择&ldquo;新建&rdquo;，然后点击&ldquo;文本文档&rdquo;，点击桌面上的文件，选择重命名，键入</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">&quot;.htaccess&quot;</span><span style="font-size: 9pt; font-family: 宋体;">，有些程序可能会自动留下扩展名</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.txt</span><span style="font-size: 9pt; font-family: 宋体;">，你需要重新命名文件，然后去掉此部分内容。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
Another thing to remember is if you are creating the file on your own computer or uploading it from your own computer, make sure you are uploading it in ASCII mode, not binary. Most FTP programs do a pretty good job at auto-detecting how it should be uploaded, but if you run into a problem that is the first place I would check. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">你需要注意的另外一点是，在电脑中创建文件以后，确保利用</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">ASC II</span><span style="font-size: 9pt; font-family: 宋体;">模式（非二进位的）上传。大多数</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">FTP</span><span style="font-size: 9pt; font-family: 宋体;">程序会自动监测上传情况，但如果出现问题，我会首先检查这个程序。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
Also, .htaccess files can only be created on a Linux based server running Apache. If you are not sure if you fall into that category login to your control panel your Web host provided you and snoop around in there. If you are still not sure, feel free to ask your Web host. That is what they are there for! You may need to CHMOD the htaccess file to 644 so the sever can execute the commands inside it. <br />
<br />
.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件只能在支持</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Linux</span><span style="font-size: 9pt; font-family: 宋体;">的服务器中创建。如果不确定是否属于此种类型，你可以登录控制面板，检查一下；如果还不确定，询问虚拟主机供应商。你可能需要定义</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件为</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">CHMOD644</span><span style="font-size: 9pt; font-family: 宋体;">，这样服务器可以执行文件中的指令。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
Now you know how to create an empty .htaccess file. Now it is time to start filling it up with some easy to learn and useful commands. Think of each line you put into the .htaccess file as a command for the Web hosting server to do something. Here is an example of what I mean. Think of this as the content of your .htaccess file: <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">现在你可能了解了如何创建空的</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件，下面应该在文件中添加一些容易学习、使用的指令。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件中的每一条指令，虚拟主机服务器都必须遵循。你的文件内容可以如下：</span><strong><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></strong></p>
<ul type="disc">
    <li style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Take out the trash</span><span style="font-size: 9pt; font-family: 宋体;">（排除无意义内容）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Clean the sink</span><span style="font-size: 9pt; font-family: 宋体;">（清空内容）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Mow the yard</span><span style="font-size: 9pt; font-family: 宋体;">（清扫）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
    <li style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">Rake the leaves</span><span style="font-size: 9pt; font-family: 宋体;">（最后清理）</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></li>
</ul>
<p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
Each are short commands you might do during your own day. A .htaccess file is much like giving the Web hosting server a to do list. Most commands in the .htaccess file are suppose to be on one line only. This is just the way that the server reads the information. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">每一条指令都可能是你需要做的内容。一个</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件相当于为虚拟主机服务器提供一张列表，文件中的大多数指令应该出现在一行中，服务器就是这样阅读信息。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
Another warning you might take in consideration is the ability to use the .htaccess file at all. Some Web hosts have banned it or banned it for certain uses because it causes stress and strain on the Web hosting server itself. Make sure you read through your Web host's frequently asked questions and acceptable use policy before moving forward. If they have something against it, then it should be in one of those two places. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">你需要考虑的另外一个问题就是，服务器是否可以利用</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">.htaccess</span><span style="font-size: 9pt; font-family: 宋体;">文件。有些虚拟主机不支持这个文件，或者不支持这个文件的某项作用，因为这样会引起虚拟主机服务器的运行压力。利用文件之前，首先阅读虚拟主机使用条件以及各种常见问题，避免浪费时间。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><br />
<br />
Now that you have it, what can you do with it? That is another few articles all together. Some of the coolest things are password protection, error page redirects, and deny/allow IP address to access your Web site. <br />
<br />
</span><span style="font-size: 9pt; font-family: 宋体;">现在如何利用这个文件呢？我们会在以后的文章中介绍。我们还会介绍到密码保护、出错页面设计以及</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;">IP</span><span style="font-size: 9pt; font-family: 宋体;">地址问题等等。</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana;"><o:p></o:p></span></p>]]></description>
					  </item></channel>
				  </rss>