2016-05-03 23 views
1

私はxlstの初心者です。私は、このXSLTコードを持っている:要素内のxslt属性の変更

<xsl:for-each select="marc:datafield[@tag=100]"> 
    <origination> 
    <persname encodinganalog="100" role="creator"> 
     <xsl:if test="marc:subfield[@code='a']"> 
     <xsl:value-of select="marc:subfield[@code='a']" /></xsl:if> 
     <xsl:if test="marc:subfield[@code='D']">, 
     <xsl:value-of select="marc:subfield[@code='D']" /></xsl:if> 
     <xsl:if test="marc:subfield[@code='b']">, 
     <xsl:value-of select="marc:subfield[@code='b']" /></xsl:if> 
     <xsl:if test="marc:subfield[@code='c']">, 
     <xsl:value-of select="marc:subfield[@code='c']" /></xsl:if> 
    </persname> 
    </origination> 
</xsl:for-each> 

は、私は、変換されたソース-XMLは、特定のサブフィールドを持っている場合は、「persname」の属性「@encodinganalog」を更新します。 など。次の式がtrueの場合:

<xsl:if test="marc:subfield[@code='a']"></xsl:if> 

私は "encodinganalogは" なりたい "100 $" 以下のすべての式が真である

場合:

<xsl:if test="marc:subfield[@code='a']"> 
    <xsl:value-of select="marc:subfield[@code='a']" /></xsl:if> 
<xsl:if test="marc:subfield[@code='D']">, 
    <xsl:value-of select="marc:subfield[@code='D']" /></xsl:if> 
<xsl:if test="marc:subfield[@code='b']">, 
    <xsl:value-of select="marc:subfield[@code='b']" /></xsl:if> 
<xsl:if test="marc:subfield[@code='c']">, 
    <xsl:value-of select="marc:subfield[@code='c']" /></xsl:if> 

「encodinganalogの値"は" 100 $ a $ D $ b $ c "にする必要があります。

どうすればできますか?

答えて

0

あなたはxsl:attributeの使用があなたの出力XMLあなたはここで、コードの繰り返しのビットを持っています

<origination> 
    <persname role="creator"> 
    <xsl:attribute name="encodinganalog"> 
     <xsl:text>100</xsl:text> 
     <xsl:if test="marc:subfield[@code='a']"> 
     <xsl:text>$a</xsl:text> 
     </xsl:if> 
     <xsl:if test="marc:subfield[@code='D']"> 
     <xsl:text>$D</xsl:text> 
     </xsl:if> 
     <xsl:if test="marc:subfield[@code='b']">, 
     <xsl:text>$b</xsl:text> 
     </xsl:if> 
     <xsl:if test="marc:subfield[@code='c']"> 
     <xsl:text>$c</xsl:text> 
     </xsl:if> 
    </xsl:attribute> 
    </persname> 
</origination> 

ノートに動的属性を追加することができますので、あなたがテンプレート

<origination> 
    <persname role="creator"> 
    <xsl:attribute name="encodinganalog"> 
     <xsl:text>100</xsl:text> 
     <xsl:apply-templates select="marc:subfield[@code='a']" /> 
     <xsl:apply-templates select="marc:subfield[@code='D']" /> 
     <xsl:apply-templates select="marc:subfield[@code='b']" /> 
     <xsl:apply-templates select="marc:subfield[@code='c']" /> 
    </xsl:attribute> 
    </persname> 
</origination> 
を使用して、それを少し簡略化することができその後、

そしてこの

<xsl:template match="marc:subfield"> 
    <xsl:text>$</xsl:text> 
    <xsl:value-of select="@code" />   
</xsl:template> 
+0

おかげでたくさんのようなテンプレートマッチを持っています。それは完全に動作します! –

関連する問題