首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT -匹配谓词中的变量元素

XSLT -匹配谓词中的变量元素
EN

Stack Overflow用户
提问于 2010-07-27 14:09:24
回答 2查看 3.7K关注 0票数 5
代码语言:javascript
复制
<xsl:apply-templates select="element[child='Yes']">

运行正常,但我想使用

代码语言:javascript
复制
<xsl:apply-templates select="element[$childElementName='Yes']">

所以我可以使用一个变量来指定节点。

例如

代码语言:javascript
复制
<xsl:apply-templates select="theList/entity[Central='Yes']">

在以下情况下工作正常:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<theList>
  <entity>
    <Business-Name>Company 1</Business-Name>
    <Phone-Number>123456</Phone-Number>
    <Central>Yes</Central>
    <region1>No</region1>
    <region2>Yes</region2>
    <region3>No</region3>
    <Northern>No</Northern>
  </entity>
  <entity>
    <Business-Name>Company 2</Business-Name>
    <Phone-Number>123456</Phone-Number>
    <Central>No</Central>
    <region1>Yes</region1>
    <region2>No</region2>
    <region3>No</region3>
    <Northern>Yes</Northern>
  </entity>
  <entity>
    <Business-Name>Company 3</Business-Name>
    <Phone-Number>123456</Phone-Number>
    <Central>Yes</Central>
    <region1>No</region1>
    <region2>No</region2>
    <region3>No</region3>
    <Northern>No</Northern>
  </entity>
  <entity>
    <Business-Name>Company 4</Business-Name>
    <Phone-Number>123456</Phone-Number>
    <Central>No</Central>
    <region1>No</region1>
    <region2>No</region2>
    <region3>No</region3>
    <Northern>No</Northern>
  </entity>
</theList>

但我不希望硬编码子元素名称。

有什么建议吗?

感谢Tim的回答:

代码语言:javascript
复制
<xsl:apply-templates select="theList/entity[child::*[name()=$childElement]='Yes']" />
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-27 15:22:48

可以使用local- name ()函数测试元素的名称,如下所示

代码语言:javascript
复制
<xsl:apply-templates select="theList/entity[child::*[name()='Central']='Yes']" />

这将检查名称为'Central‘的所有子节点

然后,您可以轻松地将硬编码替换为参数或变量。因此,如果在XML输入上使用以下XSLT:

代码语言:javascript
复制
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="childElement">Central</xsl:param>
  <xsl:template match="/">
    <xsl:apply-templates select="theList/entity[child::*[name()=$childElement]='Yes']" />
  </xsl:template>
  <xsl:template match="entity">
    <Name><xsl:value-of select="Business-Name" /></Name>
  </xsl:template>
</xsl:stylesheet>

您将获得输出

代码语言:javascript
复制
<Name>Company 1</Name><Name>Company 3</Name>
票数 3
EN

Stack Overflow用户

发布于 2010-07-27 21:08:12

使用的

代码语言:javascript
复制
theList/entity/*[name() = $childElementName][. = 'Yes']
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3341122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档