我是xlst的初学者。我有这个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>
我想更新属性&#34; @ encodinganalog&#34; &#34; persname&#34;如果转换后的source-xml有一个特定的子字段。 例如。如果以下表达式为真:
<xsl:if test="marc:subfield[@code='a']"></xsl:if>
我想&#34;编码模拟&#34;成为&#34; 100 $ a&#34;
如果以下所有表达式都为真:
<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>
&#34; encodinganalog&#34;的价值应该是&#34; 100 $ a $ D $ b $ c&#34;
怎么可能这样做?
答案 0 :(得分: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>