我正在尝试在XML文档中进行更改,并且通过存储和重用属性值来解决问题。
变量存储来自相同重复元素的所有值。但我希望它只存储和重用当前Element的值。
这是我的XSLT:
<!-- set them -->
<xsl:variable name="Signatur" select=".//Field[@Type='2950']/@Value"/>
<xsl:variable name="Datum" select=".//Field[@Type='9920']/@Value"/>
<xsl:template match=".//Field[@Type='8450']/Field[@Type='8540']"/>
<xsl:template match=".//Field[@Type='8450']">
<h1:Field Type="8450" Value="digitale Reproduktion">
<!-- use them -->
<h1:Field Type="8540" Value="{$Signatur}"/>
<h1:Field Type="8494" Value="{$Datum}"/>
<xsl:apply-templates/>
</h1:Field>
</xsl:template>
答案 0 :(得分:0)
变量Signatur和Datum存储来自第一和第二文档的两个值。但是我希望它们只存储和重用当前文档中的值。
看起来你根本不想使用变量。为什么不简单地对要输出的节点进行相对引用?
<xsl:template match="Document/Field[@Type='8450']">
<h1:Field Type="8450" Value="digitale Reproduktion">
<h1:Field Type="8540" Value="{Field[@Type='8540']}"/>
<h1:Field Type="8540" Value="{Field[@Type='8470']}"/>
<xsl:apply-templates/>
</h1:Field>
</xsl:template>
请注意,匹配表达式不必是相对于任何内容的完整XPath表达式。只需说明模板应匹配的节点,即代替
<xsl:template match=".//Field[@Type='8450']">
使用
<xsl:template match="Field[@Type='8450']">
答案 1 :(得分:0)
<xsl:template match=".//Field[@Type='8450']">
<xsl:variable name="Signatur" select="preceding-sibling::Field[@Type='ob28']/Field[@Type='2950']/@Value"/>
<xsl:variable name="Datum" select="preceding-sibling::Field[@Type='9920']/@Value"/>
<h1:Field Type="8450" Value="digitale Reproduktion">
<!-- use them -->
<h1:Field Type="8540" Value="{$Signatur}"/>
<h1:Field Type="8494" Value="{$Datum}"/>
<xsl:apply-templates/>
</h1:Field>
</xsl:template>