0

私はxsltに比較的慣れていません.nodecountが0に等しくない場合に何かをしたいのですが、if条件でXSLTが機能しません

<?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 が取得されます

4

1 に答える 1

3

Count問題の 1 つは、次のようにすべきときに大文字の C を使用していることです。

<xsl:if test="count(/PrecisionVestor/OtherIncomeSection/OtherIncome) != 0">

ただしcount()、ノードの存在を確認するために実際には必要ありません。代わりにこれを行うことができます:

<xsl:if test="/PrecisionVestor/OtherIncomeSection/OtherIncome">

XSLT が失敗する原因となっているもう 1 つの問題は、</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>
于 2013-03-13T14:29:34.600 に答える