现在,我能够获取某个元素"root“的直接子元素,并且这些元素的名称包含破折号。例如,假设这些直接子对象的名称为'A4-1‘、'B3-2’和'C4-3‘。
我希望能够像下面的psuedo-code那样做一些事情:
for each immediate child
print out it's child element figtitle/autonum/@ID有没有一种方法可以在不将路径连接成字符串的情况下完成类似的操作?每次我将直接的子值连接到路径的其余部分时,我都会得到一个字符串,所以我不能将它的属性值与另一个值进行比较,例如:
<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
发布于 2011-03-09 11:59:31
您需要的表达式是
/root/*/figtitle/autonum/@ID这意味着
选择任何autonum元素的所有ID属性,该元素是figtitle元素的子元素,而该元素又是顶级元素root的孙元素。
如果元素root不是文档的顶层元素,那么如果使用root的父节点作为上下文节点来计算表达式,则表达式应该是:
root/*/figtitle/autonum/@ID说明
表达式:
someElement/*选择作为计算表达式所依据的上下文节点(当前节点)的子级的名为someElement的元素的子级的所有元素。
因此,根本不需要显式枚举someElement的子项的名称。
更新:OP在一条评论中澄清了她只需要选择root的那些孩子,这些孩子的名字包含破折号、数字和字母。
This XPath expression
root/*包含(name(),'-') and translate(name(),$vAlphaNum,'‘) =’‘/figtitle/autonum/@ID
精确选择所有此类元素。
在这里,变量$vAlphaNum必须定义为包含所有小写和大写字母以及数字0-9。
在XSLT2.0中,可以将matches()函数与适当的正则表达式一起使用。
https://stackoverflow.com/questions/5235336
复制相似问题