XSL如果某个变量等于特定值,我需要运行一个循环吗?

时间:2015-12-03 18:02:09

标签: xml xslt

我是XML和XSL的新手,遇到了麻烦。我已经浏览了互联网并尝试了几乎所有我看到的东西,但我无法让它发挥作用。我需要的是输出地址是送货地址的所有人的姓名。

这是XML:

<?xml version="1.0"?>
<PurchaseOrders>
  <PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
    <Address Type="Shipping">
      <Name>Ellen Adams</Name>
      <Street>123 Maple Street</Street>
    </Address>
    <Address Type="Billing">
      <Name>Tai Yee</Name>
      <Street>8 Oak Avenue</Street>
    </Address>
  </PurchaseOrder>

  <PurchaseOrder PurchaseOrderNumber="99505" OrderDate="1999-10-22">
    <Address Type="Shipping">
      <Name>Cristian Osorio</Name>
      <Street>456 Main Street</Street>
    </Address>
    <Address Type="Billing">
      <Name>Cristian Osorio</Name>
      <Street>456 Main Street</Street>
    </Address>
  </PurchaseOrder>

这是我的xml到目前为止 - 请记住我不知道我在做什么! :):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
    <html>
      <head>
        <title>Customer Info</title>      
      </head>  
      <body>
        <table border="1">
          <thead>
          <tr bgcolor="yellow">
            <th>Customer</th>        
          </tr>  
          </thead>
          <tbody>
            <xsl:apply-templates />        
          </tbody>
        </table>
      </body>
     </html> 
  </xsl:template>

<xsl:template match="PurchaseOrder">
       <tr>
           <xsl:for-each select="Address">
              <xsl:value-of select=" .[@Type="Shipping">
                 <td>
             <xsl:value-of select="Name" />
         </td>
         </xsl:if>
         </xsl:for-each>
        </tr>
     </xsl:template>  
</xsl:stylesheet>

我已尝试过从if语句到更改代码的所有内容,但似乎没有任何效果。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

以这种方式试试吗?

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/PurchaseOrders">
    <html>
        <head>
            <title>Customer Info</title>      
        </head>  
        <body>
            <table border="1">
            <thead>
                <tr bgcolor="yellow">
                    <th>Customer</th>        
                </tr>  
            </thead>
            <tbody>
                <xsl:apply-templates select="PurchaseOrder/Address[@Type='Shipping']"/>        
            </tbody>
        </table>
    </body>
    </html> 
</xsl:template>

<xsl:template match="Address">
    <tr>
        <td>
             <xsl:value-of select="Name" />
        </td>
    </tr>
</xsl:template>  

</xsl:stylesheet>

请注意使用xsl:apply-templates完成的过滤;这消除了以后对条件的需要。