2011-09-29 108 views
0

我有一些这样的XML:结合谓词的XPath

<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" /> 

根据我的要求,我需要将它们结合起来,这样,当我通过循环递归函数我可以显示第一,然后是第二,那么第三。

任何想法如何将这些结合起来?

回答

1

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

0

输入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> 

输出:

我想这thisand