【问题标题】:XSLT: For each 2 Conditions with XPathXSLT:对于每 2 个使用 XPath 的条件
【发布时间】:2017-03-23 09:42:33
【问题描述】:

我的问题:两个条件都必须为真,并且必须在 SAME 节点上运行 2 次检查(我通过 // 选择一堆节点)

目前我通过使用新的 //books/authors 将节点留在 for each 中,但如果我把它拿出来(例如我在代码下面的想象)它会给我一个错误。 有什么帮助吗?

   <xsl:for-each select="//node">
    <routes>
      <xsl:variable name="origin" select="@origin"/>
      <xsl:variable name="dest" select="@dest"/>
      Origin: <xsl:value-of select="$origin"/>
      Dest: <xsl:value-of select="$dest"/>
      <xsl:for-each select="//books/authors [substring-before(../../@name, '.') = $origin] | //books/authors [substring-before(../../@name, '.') = $dest] ">
      </xsl:for-each>

我怎么想的,所以它在同一个节点上运行,但它输出一个错误

      <xsl:for-each select="//books/authors [substring-before(../../@name, '.') = $origin] | //books/authors [substring-before(../../@name, '.') = $dest] ">

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    我认为您正在寻找的语法是这样的..

    <xsl:for-each select="//books/authors[substring-before(../../@name, '.') = $origin and substring-before(../../@name, '.') = $dest] ">
        ....
    </xsl:for-each>
    

    这也可以...

    <xsl:for-each select="//books/authors[substring-before(../../@name, '.') = $origin][substring-before(../../@name, '.') = $dest] ">
        ....
    </xsl:for-each>
    

    请注意,../../ 获得了 authors 节点的“祖父”,因此您也可以将条件重写为...(尽管您可以将通用 * 替换为实际的元素名称

    <xsl:for-each select="//*[substring-before(@name, '.') = $origin and substring-before(@name, '.') = $dest]/books/authors">
    
    </xsl:for-each>
    

    【讨论】:

    • 我认为这行得通。现在我根本没有输出了,但我认为那是由于另一个错误,至少代码被接受为正确的代码!谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2017-07-20
    相关资源
    最近更新 更多