XSLT模板匹配用于选择的数据范围



我有一个问题。我有一些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" />

最新更新