2016-05-03 12 views
1

Ich bin ein Anfänger mit xlst. Ich habe diesen XSLT-Code:xslt Änderungsattribut im Element

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

Ich mag das Attribut „@encodinganalog“ von „persname“ aktualisieren, wenn die transformierte Quelle-xml ein bestimmtes Unterfeld hat. Zum Beispiel wenn der folgende Ausdruck gilt:

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

ich will "ENCODINGANALOG" sein "100 a $"

Wenn alle folgenden Ausdrücke erfüllt sind:

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

Der Wert von „ENCODINGANALOG "sollte sein" 100 $ a $ D $ b $ c "

Wie ist es möglich, das zu tun?

Antwort

0

Sie können von xsl:attribute machen dynamischen Attributen zu Ihrer XML-Ausgabe hinzufügen

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

Hinweis Sie ein Stück Code-Wiederholung haben hier tun, so könnte man es ein wenig vereinfachen Vorlagen

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

Und haben dann eine Vorlage Spiel ähnliche

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

vielen Dank. Es funktioniert perfekt! –

Verwandte Themen