【问题标题】:Combining Predicates In XPaths在 XPath 中组合谓词
【发布时间】:2011-09-29 19:40:56
【问题描述】:

我有一些这样的 XML:

<MT N="tag1" V="text"/>
<MT N="tag2" V="more text"/>
<MT N="tag3" V="other text"/>
<MT N="tag4" V="something cool"/>
<MT N="target_tag" V="i want this"/>
<MT N="target_tag" V="and this"/>

我正在尝试将 MT 定位到 N=target_tag 和数字(1 或 2)。

尽管我希望来自this link,但以下内容不起作用:

<xsl:variable name="display" select="MT[@N = 'target_tag' and 2]/@V" />

如果我尝试这个,我总是会得到第一个:

<xsl:variable name="display" select="MT[@N = 'target_tag']/@V" />

如果我尝试这个,我总是会得到第二个 MT 标签(在这个例子中是“更多文本”):

<xsl:variable name="display" select="MT[2]/@V" />

我也试过这个,但没有运气:

<xsl:variable name="display" select="MT[2][@N = 'target_tag']/@V" />

根据我的要求,我需要将它们组合起来,这样当我循环遍历一个递归函数时,我可以显示第一个,然后是第二个,然后是第三个。

有什么想法可以将它们组合起来吗?

【问题讨论】:

    标签: xslt xpath xslt-1.0 predicate google-search-appliance


    【解决方案1】:

    select="MT[@N = 'target_tag'][2]" 应该可以工作。

    【讨论】:

      【解决方案2】:

      输入 XML:

      <root>
      <MT N="tag1" V="text"/>
      <MT N="tag2" V="more text"/>
      <MT N="tag3" V="other text"/>
      <MT N="tag4" V="something cool"/>
      <MT N="target_tag" V="i want this"/>
      <MT N="target_tag" V="and this"/>
      </root>
      

      XSLT:

      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          <xsl:template match="root">
              <xsl:for-each select="MT">
                  <xsl:if test="@N = 'target_tag'">
                      <xsl:value-of select="@V"/>
                  </xsl:if>
              </xsl:for-each>
          </xsl:template>
      </xsl:stylesheet>
      

      输出:

      我想要这个和这个

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 2010-10-07
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多