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がない (またreturn要素もない)ため、これを行う必要があります。

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