我对xslt比较新,如果nodecount不等于0,我想做点什么,但是XSLT不能用于if条件
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="CSS.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="main_cont">
<div class="page3">
<xsl:if test="(Count(/PrecisionVestor/OtherIncomeSection/OtherIncome) != 0)">
<div class="rent_roll">
<div class="othr_inc">
<div class="fst_r_box">
<div class="fst_r_box_fst_row" style="width:100%; height:30px; float:left;">
<div class="item" style="width:25%; height:30px; float:left; line-height:30px;">Description</div>
<div class="cost" style="width:18%; height:30px; float:left; text-align:center; line-height:30px;">Monthly Rent</div>
<div class="cost" style="width:18%; height:30px; float:left; text-align:center; line-height:30px;">Lease Start</div>
<div class="cost" style="width:18%; height:30px; float:left; text-align:center; line-height:30px;">Lease End</div>
<div class="cost" style="width:18%; height:30px; float:left; text-align:center; line-height:30px; ">Escalator</div>
</div>
<xsl:for-each select="PrecisionVestor/OtherIncomeSection/OtherIncome">
<div class="fst_r_box_fst_row_inn">
<div class="item_b" style="width:25%; "><xsl:value-of select="Description"/></div>
<div class="cost_b" style="width:12%; margin-right:6%; text-align:right; float:left;"><xsl:value-of select="MonthlyRent"/></div>
<div class="cost_b" style="width:12%; margin-right:6%; text-align:right; float:left;"><xsl:value-of select="LeaseStart"/></div>
<div class="cost_b" style="width:12%; margin-right:6%; text-align:right; float:left;"><xsl:value-of select="LeaseEnd"/></div>
<div class="cost_b" style="width:12%; margin-right:6%; text-align:right; float:left;"><xsl:value-of select="Escalator"/></div>
</div>
</xsl:for-each>
<xsl:for-each select="PrecisionVestor/OtherIncomeSection/TotalOtherIncome">
<div class="fst_r_box_btm_row">
<div class="item_b" style="width:25%; "><xsl:value-of select="Description"/></div>
<div class="cost_b" style="width:12%; margin-right:6%; text-align:right; float:left;"><xsl:value-of select="MonthlyRent"/></div>
<div class="cost_b" style="width:12%; margin-right:6%; text-align:right; float:left;"></div>
<div class="cost_b" style="width:12%; margin-right:6%; text-align:right; float:left;"></div>
<div class="cost_b" style="width:12%; margin-right:6%; text-align:right; float:left;"><xsl:value-of select="Escalator"/></div>
</div>
</xsl:for-each>
</div>
</div>
</xsl:if>
</div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这是xslt
的xml<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xslStyle1.xsl"?>
<PrecisionVestor>
<OtherIncomeSection>
<OtherIncome>
<Description>Rent</Description>
<MonthlyRent>200</MonthlyRent>
<LeaseStart>3/12/13</LeaseStart>
<LeaseEnd>3/12/14</LeaseEnd>
<Escalator>2</Escalator>
</OtherIncome>
<TotalOtherIncome>
<Description>Totals</Description>
<MonthlyRent>200</MonthlyRent>
<Escalator>2</Escalator>
</TotalOtherIncome>
</OtherIncomeSection>
</PrecisionVestor>
它正常工作,直到我添加if条件一旦我添加if条件我得到空白html
答案 0 :(得分:3)
一个问题是你在Count
中使用大写C时应该是:
<xsl:if test="count(/PrecisionVestor/OtherIncomeSection/OtherIncome) != 0">
但实际上并不需要count()
来检查节点是否存在。你可以简单地这样做:
<xsl:if test="/PrecisionVestor/OtherIncomeSection/OtherIncome">
导致XSLT失败的另一个问题是您在</div>
标记之前缺少结束<xsl:if>
标记。如果这两个问题都得到解决,那么XSLT应该运行。
我还建议稍微整理一下XSLT,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="CSS.css" rel="stylesheet" type="text/css" />
<style>
.item, .item_b { width: 25%; }
.item, .cost { height: 30px; float:left; line-height: 30px; }
.cost { width: 18%; text-align: center; }
.cost_b { width: 12%; margin-right: 6%; text-align: right; float: left; }
</style>
</head>
<body>
<div class="main_cont">
<div class="page3">
<xsl:apply-templates select="PrecisionVestor/OtherIncomeSection[OtherIncome]" />
</div>
</div>
</body>
</html>
</xsl:template>
<xsl:template match="OtherIncomeSection">
<div class="rent_roll">
<div class="othr_inc">
<div class="fst_r_box">
<div class="fst_r_box_fst_row" style="width:100%; height:30px; float:left;">
<div class="item">Description</div>
<div class="cost">Monthly Rent</div>
<div class="cost">Lease Start</div>
<div class="cost">Lease End</div>
<div class="cost">Escalator</div>
</div>
<xsl:apply-templates select="OtherIncome">
<xsl:with-param name="rowClass" select="'fst_r_box_fst_row_inn'" />
</xsl:apply-templates>
<xsl:apply-templates select="OtherIncome">
<xsl:with-param name="rowClass" select="'fst_r_box_btm_row'" />
</xsl:apply-templates>
</div>
</div>
</div>
</xsl:template>
<xsl:template match="OtherIncome | TotalOtherIncome">
<xsl:param name="rowClass" />
<div class="$rowClass">
<xsl:apply-templates select="Description | MonthlyRent" />
<xsl:apply-templates select="LeaseStart | LeaseEnd" />
<xsl:apply-templates select="self::TotalOtherIncome" mode="leaseColumns" />
<xsl:apply-templates select="Escalator" />
</div>
</xsl:template>
<xsl:template match="Description">
<div class="item_b">
<xsl:value-of select="."/>
</div>
</xsl:template>
<xsl:template match="MonthlyRent | LeaseStart | LeaseEnd | Escalator">
<div class="cost_b">
<xsl:value-of select="."/>
</div>
</xsl:template>
<xsl:template match="TotalOtherIncome" mode="leaseColumns">
<div class="cost_b"></div>
<div class="cost_b"></div>
</xsl:template>
</xsl:stylesheet>