xslt和xml - 不渲染(一旦我能够渲染这个生病渲染其余的)

时间:2013-09-20 22:52:27

标签: xml xslt

您好我正在尝试将样式表提供给下面的xml:但是我只是不知道我的xpath有什么问题。我试过引用每个网站然而它只是没有呈现。

<careTeames> 
   <careteame> 
      <PCP>JONES,MARY</PCP> 
       <type>Ped - Under 5</type> 
       <caregivers/> 
       <providers> 
         <provider>Henderson,Wilson</provider>
         <providertype>Cardilogist</providertype>
         <provider>H,WILLIAM</provider> 
         <providertype>OPTHOMOLGY</providertype> 
       </providers>
   </careteame>
   <careteame> 
      <PCP>JONES,MARY2</PCP> 
       <type>Ped - Under 5</type> 
       <caregivers/> 
       <providers> 
         <provider>Henderson,Wilson2</provider>
         <providertype>Cardilogist2</providertype>
         <provider>H,WILLIAM2</provider> 
         <providertype>OPTHOMOLGY2</providertype> 
       </providers>
    </careteame>
</careTeames>

我只想要一个简单的输出:

PCP       JONES, MARY 
PROVIDERS Henderson, Wilson
          H, William

我的xsl能够产生PCP的第一行但是另一行 - 每次都失败:(

<xsl:template match="/">
  <html>
  <body>
    <h2>Data</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>col1</th>
        <th>col2</th>
      </tr>
      <xsl:for-each select="return/careTeames/careteame">
      <tr>
        <td><xsl:value-of select="PCP" /></td>
        <td><xsl:value-of select="type" /></td>
      </tr>
      <xsl:for-each select="return/careTeames/careteame/caremanagers">
                        <tr><td><xsl:value-of select="caremanagertype"/></td><td>( <xsl:value-of select="caremanagertype"/> )</td></tr>
      </xsl:for-each>   
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

1 个答案:

答案 0 :(得分:0)

问题是当你这样做时......

<xsl:for-each select="return/careTeames/careteame">

然后在 xsl:for-each 循环中,您当前的上下文将是 careteame 。这意味着嵌套的 xsl:for-each 将与此相关。也就是说它将寻找路径return/careTeames/careteame/caremanagers作为当前节点的后代。

所以,而不是这样做

<xsl:for-each select="return/careTeames/careteame/caremanagers">

此时你真正需要做的就是这个

<xsl:for-each select="caremanagers">

或者更确切地说,您需要这样做,因为您的XML示例中没有 caremanagers (也没有返回元素)。

<xsl:for-each select="providers/provider">

实际上,使用模板匹配通常更好,而不是 xsl:for-each 。试试这个与你当前的XML样本匹配的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">
      <html>
         <body>
            <h2>Data</h2>
            <table border="1">
               <tr bgcolor="#9acd32">
                  <th>col1</th>
                  <th>col2</th>
               </tr>
               <xsl:apply-templates select="return/careTeames/careteame"/>
            </table>
         </body>
      </html>
   </xsl:template>

   <xsl:template match="careteame">
      <tr>
         <td>
            <xsl:value-of select="PCP"/>
         </td>
         <td>
            <xsl:value-of select="type"/>
         </td>
      </tr>
      <xsl:apply-templates select="providers/provider"/>
   </xsl:template>

   <xsl:template match="provider">
      <tr>
         <td>
            <xsl:value-of select="."/>
         </td>
      </tr>
   </xsl:template>
</xsl:stylesheet>