2017-09-17 4 views
0

私のコードの一般的な目的は、XMLドキュメント内のいくつかの情報を表示するHTMLドキュメントを生成することです。 私は自分のIDに基づいて医師の名前を取得しようとしています。 は、ここに私のXML文書は次のようになります。xsltの変数を使用して異なるキーとキーを照合する方法は?

<hospital> 
     <doctors> 
      <doctor> 
       <name>john</name> 
       <id>1</id> 
       ... 
      </doctor> 
      <doctor> 
       <name>steve</name> 
       <id>2</id> 
       ... 
      </doctor> 
     </doctors> 
     <records> 
      <record> 
       <doctor id="1" /> 
       <date>...</date> 
       <patient> 
       ... 
       </patient> 
      </record> 
     </records> 
    </hospital> 

これは私のXSLTコードです:私は読むことができます私のHTMLで

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:key name="ids" match="doctor" use="id" /> 

     <xsl:template match="/"> 
     ... 
     <xsl:apply-templates select="hospital/records/record"/> 
     ... 
     </xsl:template> 

     <xsl:template match="record"> 
     ... 
     Doctor identification : <xsl:value-of select="doctor/@id" /> 
     <xsl:variable name="docId" select="/doctor/@id" /> 
     <xsl:value-of select="key('ids',$docId)/hospital/doctors/doctor/name"/> 
     ... 
     </xsl:template> 
    </xsl:stylesheet> 

"ドクター識別:医師のID"

私は以下を得ることができます:

"医者の身分証明書医師の医者の名前 "

私はxsltコードが機能しない理由を理解しようと数時間を費やしました。 これは割り当てであり、xpath "hospital/records/record"を使用する必要があります。 私の質問が十分に明確であることを願っています。 ありがとうございました!

答えて

1

まず、これを変更:

<xsl:variable name="docId" select="/doctor/@id" /> 

に:

<xsl:variable name="docId" select="doctor/@id" /> 

は次に変更するには、この:

<xsl:value-of select="key('ids',$docId)/hospital/doctors/doctor/name"/> 

へ:

<xsl:value-of select="key('ids', $docId)/name"/> 

これらの変更は自明です。変数は実際には必要ではないことにご注意ください。単純に行うことができます:

<xsl:value-of select="key('ids', doctor/@id)/name"/> 
関連する問題