我有一个问题。我有一些XML。我想使用模板匹配一些重复的部分向下的层次结构。我的匹配条件的一部分是来自模板匹配之外的数据。如何做到这一点?
我正在使用XSLT v3.0。
示例数据(比实际数据简单得多,但它应该能解释我的情况):
<root>
<source>Abc</source>
<record>
<key>1</key>
<value>a</value>
</record>
<record>
<key>1</key>
<value>a</value>
</record>
<record>
<key>2</key>
<value>b</value>
</record>
<record>
<key>3</key>
<value>c</value>
</record>
</root>
我的模板匹配条件看起来像这样:
<template match="record[key ="a"] and rootsource = "Abc">
显然,关于记录的部分有效,关于rootsource的部分无效。即使当我想在模板中使用rootsource值时,它也是空白的。我理解这可能是XSLT的范围限制。是否有ANY怎么绕过它?
谢谢!
我猜(!)你想:
<xsl:template match="root[source = 'Abc']/record[key ='a']" >
,它将匹配key
值为"a"
的record
,并且具有source
值为"Abc"
的兄弟姐妹。
即使我想在模板中使用rootsource值,它也是空白的。
在匹配record
的模板中,您可以使用以下任何表达式之一获得source
的值:
<xsl:value-of select="../source" />
<xsl:value-of select="preceding-sibling::source" />
<xsl:value-of select="/root/source" />