0

您好,我正在尝试为以下 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 的第一行,但是另一个 for-each 失败:(

<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>
4

1 回答 1

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更好。试试这个 XSLT,它与您当前的 XML 示例相匹配

<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>
于 2013-09-20T23:08:56.110 回答