2011-12-15 10 views
0

ノードに多くの属性が含まれているXMLを使用しています.XSLを使用してFO PDFファイル(レポート)を作成しています。現在のノードで特定の属性を持つテンプレートを作成しようとしていて、基本的な書式設定を行うfo:blockを作成します。xslt template-属性とその値をどのように渡しますか?

ここには、1つのノード上のすべての属性と値の大きなリストを作成するテンプレートがあります。

XSL:

<xsl:template name="createAttributeAndValueList"> 
    <xsl:param name="node" select="." /> 
    <xsl:for-each select="$node/@*"> 
     <fo:block> 
     <xsl:value-of select="concat(name(),': ')"/> 
     <xsl:value-of select="."/> 
     </fo:block> 
    </xsl:for-each> 
</xsl:template> 

私は唯一の代わりにノードをオフにそれらのすべてのため、これらの属性の1または2を取得したいときしかし、時間があります。私はこれが本当に明白なものだと推測していますが、私は経験不足のためにまだ理解していません。

私は同じ書式設定をしようとしていますが、私はパラメータに自分の値を渡すことができ、私が欲しいものを得るために構文の権利を得ることができないようです。ここで私が持っているものです。

XSL:

<xsl:template name="createAttributeValuePair"> 
    <xsl:param name="attribute" select="." /> 
    <xsl:for-each select="@*"> 
     <fo:block> 
     <xsl:value-of select="concat(name(),': ')"/> 
     <xsl:value-of select="."/> 
     </fo:block> 
    </xsl:for-each> 
</xsl:template> 

そして、ここでは、私はそれを呼び出すようにしようとしている方法は次のとおりです。 XSL:

<fo:block font-weight="normal" margin-left="6pt"> 
    <xsl:call-template name="createAttributeValuePair"> 
     <xsl:with-param name="attribute"          
         select="/device:DevicePatientEncounter/device:Encounter/ 
            device:Followup/@UnderlyingRhythm"/> 
    </xsl:call-template> 
</fo:block> 

私のXMLは次のようになります。

<DevicePatientEncounter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
         GeneratedTime="2011-12-14T13:36:05" 
         EncounterDate="2011-11-15T11:04:54" 
         xmlns="device"> 
    <Encounter> 
     <Followup UnderlyingRhythm="Sinus bradycardia" 
        UnderlyingRhythmRateBpm="44" 
        IsPmDependent="false" 
        PresentingRhythm="Atrial fibrillation" 
        BatteryChargeSeconds="5" 
        AutoCapFrequency="3 Years" 
        LastCapacitorFormDate="2011-10-25T00:00:00" 
        BatteryLongevity="0" 
        BatteryVoltage="11" 
        BatteryStatus="MOL"/> 
    </Encounter> 
</DevicePatientEncounter> 

答えて

1

ほんの少しのノート:

  • あなたはcreateAttributeValuePairに属性を渡しているが、あなたはあなたがこのテンプレートに@*をループしているが、テンプレートは、単一の属性の出力に設計された名前と値
  • 思わパラメータ
  • で何かを決してまた、call-templateは、現在のノードを変更しないので、

私はあなたがこのような何かを探している推測しているループ内で反復処理されているかの要素の属性本当にはっきりしていない:

<xsl:template name="createAttributeValuePair"> 
    <xsl:param name="attribute" select="."/> 
    <fo:block> 
     <xsl:value-of select="concat(name($attribute),': ')"/> 
     <xsl:value-of select="$attribute"/> 
    </fo:block> 
</xsl:template> 

ここでは完全なデモです:

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:fo="http://www.w3.org/1999/XSL/Format" 
       xmlns:device="device"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:template match="/"> 
     <fo:block font-weight="normal" margin-left="6pt"> 
      <xsl:call-template name="createAttributeValuePair"> 
       <xsl:with-param name="attribute" 
         select="/device:DevicePatientEncounter/device:Encounter/ 
            device:Followup/@UnderlyingRhythm"/> 
      </xsl:call-template> 
     </fo:block> 
    </xsl:template> 
    <xsl:template name="createAttributeValuePair"> 
     <xsl:param name="attribute" select="."/> 
     <fo:block> 
      <xsl:value-of select="concat(name($attribute),': ')"/> 
      <xsl:value-of select="$attribute"/> 
     </fo:block> 
    </xsl:template> 
</xsl:stylesheet> 

あなたの例のXML与えられたとき、次の出力が生成されます

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:device="device" 
      font-weight="normal" 
      margin-left="6pt"> 
    <fo:block>UnderlyingRhythm: Sinus bradycardia</fo:block> 
</fo:block> 
関連する問題