用于选择在列表中指定了子值的元素的 xPATH



考虑以下情况:

<xsl:variable name="list">
   <row>
     <webid>2</webid>
   </row>
   <row>
     <webid>3</webid>
   </row>
   <row>
     <webid>4</webid>
   </row>
</xsl:variable>
<!--pseudo code, not sure if it will work in real time-->
<xsl:variable name="addr" select="addresses/item[not(id=$list/webid)]"/>

我想过滤那些 id 不在$list webid collection中的地址项目。我发布的表达式会起作用吗?请指教。

在 XSLT 1.0 中,像这样的变量声明是结果树片段,而不是节点集,您唯一可以使用它做的是 copy-ofvalue-of - 您无法使用 XPath 表达式导航到它。 您需要

  1. 使用扩展函数(如 exslt:node-set)将 RTF 转换为实际节点集或
  2. 使用带有document('')的技巧将样式表本身作为 XML 文档进行访问

选项 2 仅适用于示例等变量值为静态 XML 的情况。 如果您有一个变量,其值是使用xsl:命令或属性值模板构建的,例如

<xsl:variable name="allNames">
  <xsl:for-each select="name">
    <person name="{.}" />
  </xsl:for-each>
</xsl:variable>

然后,您必须使用node-set函数。 document('')方法将为您提供 name 属性的实际xsl:for-each元素和文本值 {.},而不是评估它的结果。

选项 1

xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt"添加到<xsl:stylesheet>标记,然后使用

<xsl:variable name="addr" select="addresses/item[
     not(id=exslt:node-set($list)/row/webid)]"/>

选项 2

<xsl:variable name="addr" select="addresses/item[
     not(id=document('')//xsl:variable[name='list']/row/webid)]"/>

我放了 not(addresses/item[id=$list/webid])

相关内容

  • 没有找到相关文章

最新更新