首页 > 解决方案 > 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 \root\source = "Abc">

显然,关于记录的部分有效,关于 \root\source 的部分无效。即使我想在模板中使用 \root\source 值,它也是空白的。我知道这可能是 XSLT 的一些范围限制。有什么办法可以绕过它吗?

谢谢!

标签: xmltemplatesxsltscopematch

解决方案


我猜(!)你想要:

<xsl:template match="root[source = 'Abc']/record[key ='a']" >

这将匹配一个record值为key"a"并且有一个source值为 的兄弟"Abc"


即使我想在模板中使用 \root\source 值,它也是空白的。

在模板匹配record中,您可以获得source 使用以下任一表达式的值:

<xsl:value-of select="../source" />
<xsl:value-of select="preceding-sibling::source" />
<xsl:value-of select="/root/source" />

推荐阅读