2015-02-09 35 views
0

有没有可能的解决方法:XSL选择的时候,否则使用?

你可以有两列,一个标题为'sign',另一个'post'。但只能显示实际使用的是什么? (如果你有400个客户,那么签署的人有<th>说感叹Via等在哪里,如果他们收到的邮寄然后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添加选择语句:

<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教程,让我通过每个阶段,但是我认为我失去了一些东西,因为我无法找到一种方法来做到这一点,同时使用

我希望最终的结果会有像下面的东西(我无法发布图像因为我是新的)。 预期结果:

一张表。 表包含有关该产品的大量信息,最后缩小为客户将如何收到此项目。 表格将包括客户详细信息(地址等),订单信息和产品规格(全部成功输入)。但是,似乎当我上传它显示信息加上额外的'头'。

例如: 客户已经为他们的物品签名,它出现'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> 
+0

你能发表一个小例子的输入+这个例子的预期结果吗? - – 2015-02-09 01:15:27

+0

你是否将你的企图放在double foreach中,如下所示: // yourattempt // 2015-02-09 01:21:38

+0

@ michael.hor257k我已更新,对不起,如果我的解释过于牵强。我无法上传图片! – 2015-02-09 01:27:10

回答

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> 
+0

不知怎的,通过这样做,它已经删除了任何'发布'信息,只显示一个客户签名。 @noob – 2015-02-09 01:32:52

+0

唯一改变的是'sign'部分的头部仍然没有内容:( – 2015-02-09 01:50:50

+3

我们没有看到太多的代码(没有模板匹配),更不用说输入样本。只要OP没有提供完整的信息。 – 2015-02-09 01:57:53