首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT 2.0 -如何更改比较测试的路径

XSLT 2.0 -如何更改比较测试的路径
EN

Stack Overflow用户
提问于 2011-03-09 00:32:27
回答 1查看 172关注 0票数 0

现在,我能够获取某个元素"root“的直接子元素,并且这些元素的名称包含破折号。例如,假设这些直接子对象的名称为'A4-1‘、'B3-2’和'C4-3‘。

我希望能够像下面的psuedo-code那样做一些事情:

代码语言:javascript
复制
for each immediate child
    print out it's child element figtitle/autonum/@ID

有没有一种方法可以在不将路径连接成字符串的情况下完成类似的操作?每次我将直接的子值连接到路径的其余部分时,我都会得到一个字符串,所以我不能将它的属性值与另一个值进行比较,例如:

代码语言:javascript
复制
<xsl:if test="*['yes' = (PATH)]">
    <xsl:value-of select="PATH[@ID = 'yes']"/> 
</xsl:if>

路径的位置:

root/A4-1/figtitle/autonum/@ID

root/B3-2/figtitle/autonum/@ID

root/C4-3/figtitle/autonum/@ID

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-09 11:59:31

您需要的表达式是

代码语言:javascript
复制
/root/*/figtitle/autonum/@ID

这意味着

选择任何autonum元素的所有ID属性,该元素是figtitle元素的子元素,而该元素又是顶级元素root的孙元素。

如果元素root不是文档的顶层元素,那么如果使用root的父节点作为上下文节点来计算表达式,则表达式应该是:

代码语言:javascript
复制
root/*/figtitle/autonum/@ID

说明

表达式:

代码语言:javascript
复制
someElement/*

选择作为计算表达式所依据的上下文节点(当前节点)的子级的名为someElement的元素的子级的所有元素。

因此,根本不需要显式枚举someElement的子项的名称。

更新:OP在一条评论中澄清了她只需要选择root的那些孩子,这些孩子的名字包含破折号、数字和字母。

This XPath expression

root/*包含(name(),'-') and translate(name(),$vAlphaNum,'‘) =’‘/figtitle/autonum/@ID

精确选择所有此类元素。

在这里,变量$vAlphaNum必须定义为包含所有小写和大写字母以及数字0-9。

在XSLT2.0中,可以将matches()函数与适当的正则表达式一起使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5235336

复制
相关文章

相似问题

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