怎么读取上一级节点的值,显示在本范本规则里(在线急等)

colee 2003-05-12 05:11:35
有XML文件:
<root>
<order>
<cust_name>n1</cust_name>
<sheet>
<aa>aa1</aa>
</sheet>
<sheet>
<aa>aa2</aa>
</sheet>
</order>

<order>
<cust_name>n2</cust_name>
<sheet>
<aa>aaa1</aa>
</sheet>
<sheet>
<aa>aaa2</aa>
</sheet>
</order>
。。。。。。
</root>

XSL文件:
......
<xsl:template match="root">
......
<body leftmargin="0" topmargin="15">
<xsl:for-each select="order">
<xsl:apply-templates select="sheet"/>
</xsl:for-each>
</body>
</html>
</xsl:template>

<xsl:template match="sheet">
<table>
<tr><td><xsl:value-of select="/order/cust_name"/>
<!--问题就在于此,怎么获得本order/cust_name节点的值,并显示在上面的范本规则里(因此范本规则一定要用)!我这样写的不行!--!>
</td></tr>
<tr><td><xsl:value-of select="aa"/></td></tr>
</table>
</xsl:template>
...全文
905 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
月光易水 2003-05-13
  • 打赏
  • 举报
回复
xsl完整代码?



:_)
colee 2003-05-13
  • 打赏
  • 举报
回复
上面问题已经解决,但仍有个更头疼的问题:
<script language="JavaScript" For="window" Event="onload">
var order_num =<xsl:value-of select="count(order)"/>;
<![CDATA[
function readNum(real_number) {......}

for(i=1;i<=order_num;i++)
{ eval("amount_en"+i).innerHTML=readNum(eval("amount_num"+i).innerHTML);
eval("qty_en"+i).innerHTML=readNum(eval("qty_num"+i).innerHTML); }
]]>
</script>

当order_num=1时正常,当order_num>1时,就会停止相应,好似死循环那样。
请问这是怎么回事?我都浪费很多时间了,千思都不得其解,
colee 2003-05-13
  • 打赏
  • 举报
回复
To moonpiazza(月下小生) :

问题解决了,是没定义好变量。
让您晕了真过意不去(我已经特意删掉不少代码:D)
非常感谢您的建议!!!
月光易水 2003-05-13
  • 打赏
  • 举报
回复
晕!

eval("qty_en"+i).innerHTML = readNum(eval("qty_num"+i).innerHTML);
对象ID"qty_en"+i,没有定义, 是否在下面漏写,只定义了对象ID"amount_en"+i


运行产生死循环
错误原因:函数readNum中,内部变量i没有定义,引用并修改了全局变量i所造成
解决方法:

1.函数readNum,增加变量定义
text = "";
==>
var text = "";
var i;

2. 或者修改全局变量i为gI
for(gI=1;gI<=order_num;gI++)
{
eval("amount_en"+gI).innerHTML = readNum(eval("amount_num"+gI).innerHTML);
eval("qty_en"+gI).innerHTML = readNum(eval("qty_num"+gI).innerHTML);
}

强烈建议:
1. 代码缩进
2. 变量定义,变量命名至少要体现出其生存周期、类型、含义
3. 尽量使每一句简单化,多条语句放在一起执行,只节省了几个字符,却给他人(或者日后的自己)阅读代码或修改造成巨大的困难
4. 注释,一些技巧或复杂语句尽量简单化,不能简化,就需要注释,节省了日后重新思考设计思路的时间.


看完这段代码,小生真的头晕了


:_)
colee 2003-05-13
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:decimal-format name="UTF-8"/>
<xsl:output method="html" encoding="UTF-8" standalone="yes"/>
<xsl:template match="Root">
<html>
<head>
<title>Invoice</title>
<script language="JavaScript" For="window" Event="onload">
var order_num =<xsl:value-of select="count(order)"/>;
<xsl:comment>
<![CDATA[
A = "zero^one^two^three^four^five^six^seven^eight^nine^ten^eleven^twelve^thirteen^fourteen^fifteen^sixteen^seventeen^eighteen^nineteen^^twenty^thirty^forty^fifty^sixty^seventy^eighty^ninety^hundred^^thousand^million^billion^trillion^quadrillion^quintillion".split("^");
B = new Array();
for (i=0;i<1000;i++) {
B[i] = i<20?A[i]:i<100?A[19+Math.floor(i/10)]+(i%10==0?"":"-"+B[i%10]):A[Math.floor(i/100)]+" "+A[29]+(i%100==0?"":" and "+B[i%100]);
}
function readNum(real_number) {
text = "";
//var real_number=real_number;
with (real_number.split(".")[0].split(",").join("")) {
for (i=0;i<Math.ceil(length/3);i++) {
sec = parseInt(substring(length-3*i-3,length-3*i),10);
text = (i==0&&sec>0&&sec<100&&parseInt(substring(0,length-3),10)>0?" and ":"")+(sec==0&&(i>0||toString(10)!=0)?"":B[sec])+(sec==0?"":" "+(typeof A[30+i]=="undefined"?"undefined".fontcolor("red"):A[30+i]))+(i==0||sec==0||(sec>0&&text=="")?" ":",".fontcolor("black")+" ")+text;
}
}
if (real_number.indexOf(".")!=-1) {
with (real_number.split(".")[1].split(",").join("")) {
for (i=0;i<Math.ceil(length/3);i++) {
sec = parseInt(substring(length-3*i-3,length-3*i),10);
text += (i==0?(text==""?A[0]:"")+" and cents ":"")+(sec==0&&(i>0||toString(10)!=0)?"":B[sec])+(sec==0?"":" ")+(i==0||sec==0||(sec>0&&text=="")?" ":" ");
}
}
}
return ((text.indexOf("undefined")==-1?"":typeof alert("数字超长,超出部分将无法正确输出!")=="undefined"?"":"")+text);
}

for(i=1;i<=order_num;i++)
{
//document.getElementById('amount_en'+i).innerHTML=readNum(document.getElementById('amount_num'+i).innerHTML);
//document.getElementById('qty_en'+i).innerHTML=readNum(document.getElementById('qty_num'+i).innerHTML);
eval("amount_en"+i).innerHTML=readNum(eval("amount_num"+i).innerHTML);
eval("qty_en"+i).innerHTML=readNum(eval("qty_num"+i).innerHTML);
}
]]>
</xsl:comment>
</script>
</head>
<body>
<xsl:for-each select="order">
<xsl:apply-templates select="sheet"/>
<xsl:call-template name="footer"/>
</xsl:for-each>
</body>
</html>
</xsl:template>

<xsl:template match="sheet">
<center>
<xsl:call-template name="common_part"/>
<table width="92%" border="1" align="center" cellpadding="2" cellspacing="0">
<tr align="center" class="TdBold">
<td width="4%"></td>
<td width="13%">PO Ref.<br/>Job no.</td>
<td width="17%">Style no.(Cus)<br/>Style no.(CA)</td>
<td width="38%">Description<br/>Gold weight,Stone used</td>
<td width="8%">Qty</td>
<td width="8%">Unit<br/>Value</td>
<td width="12%">Amount<br/><span style="font-size:6pt;">(FOB-HK,USD)</span></td>
</tr>
<!-- 开始读取循环JOB数据 -->
<xsl:for-each select="job">
<tr>
<td rowspan="2" align="center"><xsl:value-of select="no"/></td>
<td style="border-bottom:0px solid"> <xsl:value-of select="po_no"/></td>
<td style="border-bottom:0px solid"> <xsl:value-of select="cus_style_no"/></td>
<td style="border-bottom:0px solid"> <xsl:value-of select="description"/></td>
<td rowspan="2" align="right"><xsl:value-of select="labor/qty"/> <xsl:value-of select="labor/unit"/> </td>
<td rowspan="2" align="CENTER"><xsl:value-of select="format-number(labor/unit_cost+gold/gold_price+sum(stone/stone_price),'0.00','UTF-8')"/></td>
<td rowspan="2" align="center"><xsl:value-of select="format-number(labor/labor_total_price+gold/gold_total_price+sum(stone/stone_total_price),'0.00','UTF-8')"/></td>
</tr>
<tr>
<td align="right" style="border-top:0px solid"><xsl:value-of select="job_no"/></td>
<td align="right" style="border-top:0px solid"><xsl:value-of select="ca_style_no"/></td>
<td style="border-top:0px solid"> <xsl:value-of select="desc2"/></td>
</tr>
</xsl:for-each>
<!-- 结束循环 -->
</table>
</center>
</xsl:template>

<xsl:template name="common_part">

<table width="92%" align="CENTER" cellpadding="0" cellspacing="0" style="border:0px">
<tr>
<td class="td0" width="82%">Unit 1609B-10A,Tower 3, China Hong Kong City</td>
<td class="td0" width="18%">TEL : (852) 2759 1823</td>
</tr>
<tr>
<td class="td0">Canton Road, Tsimshatsui, Hong Kong.</td>
<td class="td0">FAX : (852) 2758 5152</td>
</tr>
</table>
<hr align="center" width="92%" size="3"/>
<p align="center"><strong><font size="3">Custom Invoice</font></strong></p>
<table align="CENTER" class="TdBold" width="92%" border="0" cellspacing="0" cellpadding="1" style="border:0px">
<tr>
<td class="td0" width="4%" rowspan="7"></td>
<td class="td0" width="13%">Customer:</td>
<td class="td0" width="46%"><font face="Arial, Helvetica, sans-serif"><xsl:value-of select="../cust_name"/></font></td>
<td class="td0" width="21%"></td>
<td class="td0" width="16%">Page:<xsl:number value="position()" format="1"/> / <xsl:value-of select="count(../sheet)"/></td>
</tr>
<tr>
<td class="td0"></td>
<td class="td0"><font face="Arial, Helvetica, sans-serif"><xsl:value-of select="../cust_add1"/></font></td>
<td class="td0"></td>
<td class="td0"></td>
</tr>
</table>
</xsl:template>

<xsl:template name="footer">
<table width="92%" align="center" cellpadding="0" cellspacing="0" style="border:0px">
<tr class="TdBold">
<td colspan="4" style="height:30px;border:0px" width="72%"> </td>
<td align="right" width="8%" style="padding-right:4px;">
<span>
<xsl:attribute name="id">qty_num<xsl:number value="position()" format="1"/></xsl:attribute>
<xsl:value-of select="sum(sheet/job/labor/qty)"/>
</span>
</td>
<td align="center" width="8%">Total</td>
<td align="center" width="12%">
$<span>
<xsl:attribute name="id">amount_num<xsl:number value="position()" format="1"/></xsl:attribute>
<xsl:value-of select="format-number(sum(sheet/job/labor/labor_total_price)+sum(sheet/job/stone/stone_total_price)+sum(sheet/job/gold/gold_total_price),'0.00','UTF-8')"/>
</span>
</td>
</tr>
</table>
<table width="92%" align="center" cellpadding="0" cellspacing="0" style="border:0px">
<tr>
<td width="6%" height="25" style="font-size:11pt;font-weight:bold;" class="td0">Say :</td>
<td width="54%" class="td0"> Total amount US dollars
<span><xsl:attribute name="id">amount_en<xsl:number value="position()" format="1"/></xsl:attribute></span> only
</td>
<td width="40%" class="td0"> </td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>

28,408

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧