Xml 元素中的xslt更改属性
我是xlst的初学者。我有以下xslt代码:Xml 元素中的xslt更改属性,xml,xslt,Xml,Xslt,我是xlst的初学者。我有以下xslt代码: , , , 如果转换后的源xml有某个子字段,我想更新“persname”的属性“@encodinganalog”。 例如,如果以下表达式为真: 我希望“encodinganalog”是“100美元一个” 如果以下所有表达式均为真: , , , “encodinganalog”的值应为“100$a$D$b$c” 如何做到这一点?您可以使用xsl:attribute向输出XML添加动态属性 <origination> <
,
,
,
如果转换后的源xml有某个子字段,我想更新“persname”的属性“@encodinganalog”。
例如,如果以下表达式为真:
我希望“encodinganalog”是“100美元一个”
如果以下所有表达式均为真:
,
,
,
“encodinganalog”的值应为“100$a$D$b$c”
如何做到这一点?您可以使用
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>
100
一美元
美元
,
b美元
$c
注意,这里确实有一些代码重复,因此可以使用模板将其简化一点
<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>
100
然后进行这样的模板匹配
<xsl:template match="marc:subfield">
<xsl:text>$</xsl:text>
<xsl:value-of select="@code" />
</xsl:template>
$
您可以使用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>
100
一美元
美元
,
b美元
$c
注意,这里确实有一些代码重复,因此可以使用模板将其简化一点
<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>
100
然后进行这样的模板匹配
<xsl:template match="marc:subfield">
<xsl:text>$</xsl:text>
<xsl:value-of select="@code" />
</xsl:template>
$