XSL选择何时使用?

时间:2015-02-09 01:11:09

标签: xml xslt

有没有办法解决以下问题:

您可以有两列,一列标题为“签名”,另一列为“帖子”。但是只显示实际使用的是什么? (如果您有400个客户,那么签名的人会<th>说出叹息等,就好像他们通过帖子收到的那样,PostID和其他<th>会出现在表格中。

我使用的是这种方法:

      <th> Sign Via</th>
      <th> Sign Name</th>
      <th> Sign Address</th>
      <th> Sign City</th>

       <xsl:for-each select="delivery/sign">
        <td><xsl:value-of select="SignVia"/></td>
        <td><xsl:value-of select="SignName"/></td>
        <td><xsl:value-of select="SignAddress"/></td>
        <td><xsl:value-of select="SignCity"/></td></xsl:for-each>

      <th> Post ID</th>
      <th> Post Date</th>
      <th> Post Address</th>

    <xsl:for-each select="delivery/post">
        <td>
          <xsl:value-of select="postID"/>
        </td>
        <td>
          <xsl:value-of select="postDate"/>
        </td>
        <td>
          <xsl:value-of select="postAddress"/>
        </td>
    </xsl:for-each>

我试图添加一个XSL select语句:

<xsl:choose>
<xsl:when test="PostID">
       <td>
          <xsl:value-of select="postID"/>
        </td>
        <td>
          <xsl:value-of select="postDate"/>
        </td>
        <td>
          <xsl:value-of select="postAddress"/>
        </td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="SignVia"/></td>
        <td><xsl:value-of select="SignName"/></td>
        <td><xsl:value-of select="SignAddress"/></td>
        <td><xsl:value-of select="SignCity"/></td>
      </xsl:for-each>
      </xsl:otherwise>

我对XSL和XML非常陌生,并使用W3教程让我完成了每个阶段,但是我想我错过了一些东西,因为我在使用时无法找到方法

我希望最终结果会有类似下面的内容(因为我是新手,我无法发布图片)。 预期结果:

一张桌子。 表格包含有关产品的大量信息,最后缩小到客户如何收到此项目。 表格将包括客户详细信息(地址等),订单信息和产品规格(所有这些都已成功输入)。但是,当我上传它时,它显示信息加上额外的'标题'。

例如: 客户1已经签署了他们的项目,它出现'signvia signname'等。但也在它上面附着'postID,postDate',即使它们是空的。

提前干杯。

编辑: XSL的剩余部分:

      <body>
            <th> Customer Name</th>
            <th> Number</th>
            <th>Address</th>

        <xsl:for-each select="customer">
          <tr style="color:black; background: #eee;">
            <td><xsl:value-of select="CustomerName"/></td>
            <td><xsl:value-of select="Number"/></td>
            <td><xsl:value-of select="Address"/></td>
       </tr>



          <th> Post ID</th>
      <th>Post Date</th>
      <th> Post Address</th>
<xsl:choose>
<xsl:when test="PostID">
       <td>
          <xsl:value-of select="postID"/>
        </td>
        <td>
          <xsl:value-of select="postDate"/>
        </td>
        <td>
          <xsl:value-of select="postAddress"/>
        </td>
</xsl:when>
<xsl:otherwise>
<th> Sign Name</th>
      <th> Sign Address</th>
      <th> Sign City</th>
        <td><xsl:value-of select="SignName"/></td>
        <td><xsl:value-of select="SignAddress"/></td>
        <td><xsl:value-of select="SignCity"/></td>
      </xsl:for-each>
      </xsl:otherwise>




        <th> ProductN</th>
        <th> Quan</th>
        <th> Unit </th>
        <th> Disc </th>

    <xsl:for-each select="productStock/product">      
      <td><xsl:value-of select="ProductN"/></td>  
        <td><xsl:value-of select="Quan"/></td>   
        <td><xsl:value-of select="Amoun"/></td>    
        <td><xsl:value-of select="Reas"/></td>       



  </xsl:for-each>
  </xsl:for-each>
  </xsl:for-each>
  </xsl:for-each>
  </xsl:for-each>
  </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

嗯,我不是Xml大师,而是我感觉你的程序流程错误。试试这个:

      <xsl:if test="customer/PostID">
            <xsl:for-each select="delivery/post">
               <td>
                  <xsl:value-of select="postID"/>
                </td>
                <td>
                  <xsl:value-of select="postDate"/>
                </td>
                <td>
                  <xsl:value-of select="postAddress"/>
                </td>
            </xsl:for-each> 
        </xsl:if>
        <xsl:if test="not(customer/PostID)">
        <xsl:for-each select="delivery/sign">
        <td><xsl:value-of select="SignVia"/></td>
                <td><xsl:value-of select="SignName"/></td>
                <td><xsl:value-of select="SignAddress"/></td>
                <td><xsl:value-of select="SignCity"/></td>
         </xsl:for-each>          
     </xsl:if>