📄 detecting and handling xsl errors.htm
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<TITLE>侦测和处理Xsl错误</TITLE>
<style type="text/css">
<!--
.normal10 { font-size: 11pt}
.normal9 { font-size: 9pt}
a{ text-decoration: none }
a:hover{ color:Red;text-decoration:underline }
a {
font-size:11pt;
COLOR: cornflowerblue;
FONT-FAMILY: "新细明体", "宋体";
FONT-WEIGHT: bold
}
.normal105 { font-size: 11pt}
.p { font-size: 11pt}
-->
</style>
<link rel="stylesheet" href="../../Global.css" tppabs="http://www.xml.org.cn:8188/Global.css"></HEAD>
<BODY>
<p ALIGN="CENTER" class="normal105">[<a href="../../default.asp.htm" tppabs="http://www.xml.org.cn:8188/default.asp" target="_parent">返回首页</a>][<font face="宋体" lang="ZH-CN"><a href="../application.htm" tppabs="http://www.xml.org.cn:8188/application/application.htm" target="_parent">返回应用</a></font>]</p>
<table width="85%" border="0" align="center">
<tr>
<td width="22%" height="59"> </td>
<td width="53%" height="59">
<h2 align="center">侦测和处理Xsl错误</h2>
</td>
<td width="25%" height="59"><a name="top"></a></td>
</tr>
<tr>
<td colspan="3" height="2900">
<p> <span class="normal10"><span class="normal105">上一篇:<a href="Getting the Results of an XSL Transformation as a New DOM Document.htm" tppabs="http://www.xml.org.cn:8188/application/XSL%20uguid/Getting%20the%20Results%20of%20an%20XSL%20Transformation%20as%20a%20New%20DOM%20Document.htm" class="normal105">使用一个新的DOM文档得到XSL转换的结果</a>
<br>
下一篇:<a href="Parameterizing a Style Sheet.htm" tppabs="http://www.xml.org.cn:8188/application/XSL%20uguid/Parameterizing%20a%20Style%20Sheet.htm" class="normal105">参数化一个样式表</a><br>
返 回: <a href="Using the XSL Processor.htm" tppabs="http://www.xml.org.cn:8188/application/XSL%20uguid/Using%20the%20XSL%20Processor.htm"> <span class="normal105">使用XSL处理程序
</span></a></span></span></p>
<p><span class="normal105"><span class="normal10"><br>
</span><font face="宋体">一个Xsl样式表能生成两种类型的错误:解析错误和运行是错误.有方法能够检察报出这些错误.</font></span></p>
<p><span class="normal105"><font face="宋体">下面是一个使用数据到来加载Xml文档和Xsl样式表以及能显示结果的简单HTML网页.</font></span></p>
<pre class=clsCode><span class="normal105"><font face="Arial" class="normal105"><HTML>
<XML id="source" src="simple.xml"></XML>
<XML id="style" src="simple.xsl"></XML>
<SCRIPT event="onload" for="window">
showResult.innerHTML = source.transformNode(style.XMLDocument);
</SCRIPT>
<BODY>
<DIV id="showResult"></DIV>
</BODY>
</HTML></font></span></pre>
<p><span class="normal105"><font face="Arial"><b>transformNode</b></font>的调用触发了Xsl处理器,作为结果的HTML被插入到网页中去.但是为什么什么都没有发生呢?是因为一个错误在某处发生了,因此你必须检查是何处发生了错误.</span></p>
<p> <span class="normal105"><b><font face="Arial">parseError</font></b><font face="Arial">
</font>对象将被首先检查来确定是否在Xml文档和样式表里有解析错误.在数据岛上的解析错误不会在浏览器中生成生成错误消息.如果一个错误发生了,你可以找出原因并且设法恢复,<font color="#FF3366"><font color="#000000">或者在网页中抛出一个错误消息以便你能知道什么时候出错了.在下面的例子中,解析错误被检查出来</font></font><font color="#000000">;如果他们发生,一个函数将被调用来把错误信息格式化为适合于插入HTML文档的形式</font>.</span></p>
<pre class=clsCode><span class="normal105"><font face="Arial" class="normal105"><HTML>
<HEAD>
<TITLE>Simple Error Message Demo</TITLE>
</HEAD>
<XML id="source" src="review.xml"></XML>
<XML id="style" src="review.xsl"></XML>
<SCRIPT src="reportErrors.js"></SCRIPT>
<SCRIPT event="onload" for="window">
if (source.parseError.errorCode != 0)
result = reportParseError(source.parseError);
else
{
if (style.parseError.errorCode != 0)
result = reportParseError(style.parseError);
else
{
try {
result = source.transformNode(style.XMLDocument);
}
catch (exception) {
result = reportRuntimeError(exception);
}
}
}
// insert the results into the page
showResult.innerHTML = result;
</SCRIPT>
<BODY>
<DIV id="showResult"></DIV>
</BODY>
</HTML></font></span></pre>
<p><span class="normal105">除了解析错误,上面的例子还侦测了Xsl运行是错误(那些发生<b><font face="Arial">transformNode
</font></b><font face="宋体">调用中的错误) 运行时错误通常将会通过标准的Microsoft Internet Explorer5的error对话框来报告给用户.然而,通常更为有用的是禁止对话框,自己操纵错误消息,JavaScript5.0(与ECMA(欧洲计算机制造商协会)的262语言规范相一致)
<b> <font face="Arial">try</font></b>和<b><font face="Arial">catch</font></b>函数允许错误被禁止以及同解析错误同样的对待.
</font></span></p>
<p><span class="normal105">在上面例子中错误消息实际的格式化操作是由两个函数提供的:<font face="Arial"><b>reportParseError</b></font>和
<b><font face="Arial">reportRuntimeError </font></b>,他们被保存在一个分离的脚本文件reportErrors.js中.而<font color="#0000">主HTML网页则要参考这个脚本文件</font>.</span></p>
<pre class=clsCode><span class="normal105"><font face="Arial" class="normal105">// Parse error formatting function
function reportParseError(error)
{
var s = "";
for (var i=1; i<error.linepos; i++) {
s += " ";
}
r = "<font face=Verdana size=2><font size=4>XML Error loading '" +
error.url + "'</font>" +
"<P><B>" + error.reason +
"</B></P></font>";
if (error.line > 0)
r += "<font size=3><XMP>" +
"at line " + error.line + ", character " + error.linepos +
"\n" + error.srcText +
"\n" + s + "^" +
"</XMP></font>";
return r;
}
// Runtime error formatting function
function reportRuntimeError(exception)
{
return "<font face=Verdana size=2><font size=4>XSL Runtime Error</font>" +
"<P><B>" + exception.description + "</B></P></font>";
}</font></span></pre>
<p><span class="normal105">这两个函数返回的HTML片断能被用于插入HTML网也来代替正确的转换结果,警告你有个错误发生了并且能帮助你改正它.</span></p>
<p><span class="normal105"><b>尝试!</b> 下面的例子在不同的错误情况下示范了上面的代码: </span>
<ul>
<li><span class="normal105"><a href="../../../msdn.microsoft.com/xml/samples/review/error-src.htm" tppabs="http://msdn.microsoft.com/xml/samples/review/error-src.htm">Error
Message Demo (XML Source Parsing Error)</a> </span>
<li><span class="normal105"><a
href="../../../msdn.microsoft.com/xml/samples/review/error-style.htm" tppabs="http://msdn.microsoft.com/xml/samples/review/error-style.htm">Error Message
Demo (XSL Style Sheet Parsing Error)</a> </span>
<li><span class="normal105"><a
href="../../../msdn.microsoft.com/xml/samples/review/error-runtime.htm" tppabs="http://msdn.microsoft.com/xml/samples/review/error-runtime.htm">Error
Message Demo (XSL Run-time Error)</a> </span>
<li><span class="normal105"><a
href="../../../msdn.microsoft.com/xml/samples/review/error-script.htm" tppabs="http://msdn.microsoft.com/xml/samples/review/error-script.htm">Error Message
Demo (XSL Script Error)</a> </span>
<li><span class="normal105"><a
href="../../../msdn.microsoft.com/xml/samples/review/error-none.htm" tppabs="http://msdn.microsoft.com/xml/samples/review/error-none.htm">Error Message
Demo (No Errors)</a> </span></li>
</ul>
<p></p>
<p><span class="normal105"><a href="../../../msdn.microsoft.com/xml/samples/review/review-errors.zip" tppabs="http://msdn.microsoft.com/xml/samples/review/review-errors.zip">
Download these samples</a>. </span></p>
<p><span class="normal105">使用这样的机制来报错在Asp中也很有用.这里就是一个在服务器端处理Xml文档的等价代码</span></p>
<pre class=clsCode><span class="normal105"><font face="Arial"><span class="normal105"><span class="normal105"><%@ LANGUAGE = JScript %>
<%
// Parse error formatting function
function reportParseError(error)
{
var s </span>= "";
for (var i=1; i<error.linepos; i++) {
s += " ";
}
r = "<font face=Verdana size=2><font size=4>XML Error loading '" +
error.url + "'</font>" +
"<P><B>" + error.reason +
"</B></P></font>";
if (error.line > 0)
r += "<font size=3><XMP>" +
"at line " + error.line + ", character " + error.linepos +
"\n" + error.srcText +
"\n" + s + "^" +
"</XMP></font>";
return r;
}
// Run-time error formatting function
function reportRuntimeError(exception)
{
return "<font face=Verdana size=2><font size=4>XSL Runtime Error</font>" +
"<P><B>" + exception.description + "</B></P></font>";
}
// Set the source and style sheet locations here
var sourceFile = Server.MapPath("review.xml");
var styleFile = Server.MapPath("review-simple.xsl");
// Load the XML
var source = Server.CreateObject("Microsoft.XMLDOM");
source.async = false;
source.load(sourceFile);
// Load the XSL
var style = Server.CreateObject("Microsoft.XMLDOM");
style.async = false;
style.load(styleFile);
if (source.parseError.errorCode != 0)
result = reportParseError(source.parseError);
else
{
if (style.parseError.errorCode != 0)
result = reportParseError(style.parseError);
else
{
try {
result = source.transformNode(style);
}
catch (exception) {
result = reportRuntimeError(exception);
}
}
}
Response.Write(result);
%></span></font></span></pre>
<p><span class="normal105">这段代码本质上来说和客户端代码时一致的,使用了相同的错误格式化函数和处理过程Server.CreateObject
和Response.Write方法使用代替了客户端由数据岛和innerHTML方法提供的功能</span></p>
<p><span class="normal105"><b>尝试!</b> 下面的例子在不同的错误情况下示范了上面的代码: </span>
<ul>
<li><span class="normal105"><a href="../../../msdn.microsoft.com/xml/samples/review/error-src.asp" tppabs="http://msdn.microsoft.com/xml/samples/review/error-src.asp">ASP
Error Message Demo (XML Source Parsing Error)</a> </span>
<li><span class="normal105"><a href="../../../msdn.microsoft.com/xml/samples/review/error-style.asp" tppabs="http://msdn.microsoft.com/xml/samples/review/error-style.asp">ASP
Error Message Demo (XSL Style Sheet Parsing Error)</a> </span>
<li><span class="normal105"><a
href="../../../msdn.microsoft.com/xml/samples/review/error-runtime.asp" tppabs="http://msdn.microsoft.com/xml/samples/review/error-runtime.asp">ASP Error
Message Demo (XSL Run-time Error)</a> </span>
<li><span class="normal105"><a
href="../../../msdn.microsoft.com/xml/samples/review/error-script.asp" tppabs="http://msdn.microsoft.com/xml/samples/review/error-script.asp">ASP Error
Message Demo (XSL Script Error)</a> </span>
<li><span class="normal105"><a href="../../../msdn.microsoft.com/xml/samples/review/error-none.asp" tppabs="http://msdn.microsoft.com/xml/samples/review/error-none.asp">ASP
Error Message Demo (No Errors)</a> </span></li>
</ul>
<p></p>
<p><span class="normal105"><a
href="../../../msdn.microsoft.com/xml/samples/review/review-errors-asp.zip" tppabs="http://msdn.microsoft.com/xml/samples/review/review-errors-asp.zip"><img
alt=Download border=0 height=20
src="Detecting and Handling XSL Errors.files/icodownl.gif" tppabs="http://www.xml.org.cn:8188/application/XSL%20uguid/Detecting%20and%20Handling%20XSL%20Errors.files/icodownl.gif" width=16> Download
these samples</a>. </span></p>
</td>
</tr>
<tr>
<td colspan="3"><font face="宋体" lang="ZH-CN" size=3> </font> <rev></rev><font face="宋体" lang="ZH-CN" size=3></font>
<hr size="1">
<p align="center"><font face="宋体" lang="ZH-CN">[<a href="#top">返回标题</a>][<a href="../application.htm" tppabs="http://www.xml.org.cn:8188/application/application.htm" target="_parent">返回应用</a>][<a href="../../default.asp.htm" tppabs="http://www.xml.org.cn:8188/default.asp" target="_parent">返回首页</a>][<a href="mailto:xmlteam@egroups.com">欢迎投稿</a>]</font></p>
<p align="center">最后更新:1999年9月15日<br>
<font color="#FF0033" size="-1">本站点所刊文章版权,均归本站点所有。署名作者拥有其著作权。<br>
未经</font><font color="#FF0033"><a href="mailto:xmlteam@egroups.com"><font color="#6666FF" size="-1">允许</font></a></font><font color="#FF0033" size="-1">,不得随意转载,违者必究!!</font>
</p>
</td>
</tr>
</table>
<h2 ALIGN="CENTER"> </h2>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3></FONT>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -