2012-10-17 45 views
1

我想获取当前元素节点,但即时获取只有元素的值。请帮助我..需要检索当前元素

<root><LIST> 
        <ROLE>s1</ROLE> 
        <STATUS>yes</STATUS> 
       </LIST> 
       <LIST> 
        <ROLE>s1</ROLE> 
        <STATUS>yes</STATUS> 
       </LIST> 
       <LIST> 
        <ROLE>Member</ROLE> 
        <STATUS>no</STATUS> 
       </LIST> 
       <LIST> 
        <ROLE>Member</ROLE> 
        <STATUS>no</STATUS> 
       </LIST> 
       <LIST> 
        <ROLE>Member</ROLE> 
        <STATUS>yes</STATUS> 
       </LIST> 
       </root> 

我试图像

   <?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"><html> 
    <h2> 
<xsl:element name="test"> 
    <xsl:for-each select="/root/LIST[STATUS='yes']"> 
<xsl:copy-of select="current()"/> 
</xsl:if> 
</xsl:for-each> 
</xsl:element> 
</h2></html> 
    </xsl:template> 
</xsl:stylesheet> 

但即时得到元素的唯一值。我需要检索具有值的当前元素。没有任何人有想法

+2

你的XSLT是无效的,如果我删除如预期的输出,包括标签..什么是你想要的输出? –

+0

对不起,我发布了错误的代码。现在我更新了代码。我仍然得到价值而不是元素。 – ezhil

+0

[this](http://www.xsltcake.com/slices/YTqkzr)与您的期望有何不同? –

回答

1
<xsl:element name="test">  
    <xsl:for-each select="/root/LIST[STATUS='yes']"> 
    <xsl:copy-of select="current()"/> 
    </xsl:for-each>  
</xsl:element> 

这是说的一个相当奇怪的方式:

<test> 
<xsl:copy-of select="/root/LIST[STATUS='yes']"/> 
</test> 

所以,完整的转型可以只是这样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" method="xml" indent="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="/"> 
     <html> 
      <h2> 
       <test> 
        <xsl:copy-of select="/root/LIST[STATUS='yes']"/> 
       </test> 
      </h2> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

当这种变换所提供的XML文档应用:

<root> 
    <LIST> 
     <ROLE>s1</ROLE> 
     <STATUS>yes</STATUS> 
    </LIST> 
    <LIST> 
     <ROLE>s1</ROLE> 
     <STATUS>yes</STATUS> 
    </LIST> 
    <LIST> 
     <ROLE>Member</ROLE> 
     <STATUS>no</STATUS> 
    </LIST> 
    <LIST> 
     <ROLE>Member</ROLE> 
     <STATUS>no</STATUS> 
    </LIST> 
    <LIST> 
     <ROLE>Member</ROLE> 
     <STATUS>yes</STATUS> 
    </LIST> 
</root> 

的希望,正确的结果产生

<html> 
    <h2> 
     <test> 
     <LIST> 
      <ROLE>s1</ROLE> 
      <STATUS>yes</STATUS> 
     </LIST> 
     <LIST> 
      <ROLE>s1</ROLE> 
      <STATUS>yes</STATUS> 
     </LIST> 
     <LIST> 
      <ROLE>Member</ROLE> 
      <STATUS>yes</STATUS> 
     </LIST> 
     </test> 
    </h2> 
</html> 
+0

现在它的工作如预期的那样。谢谢Dimitre Novatchev! – ezhil

+0

@ezhil,不客气。 –

0

使用...

<xsl:copy-of select="."/> 

,并删除了无与伦比的xsl:如果是这样的...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <h2> 
     <xsl:element name="test"> 
     <xsl:for-each select="/root/LIST[STATUS='yes']"> 
      <xsl:copy-of select="."/> 
     </xsl:for-each> 
     </xsl:element> 
    </h2> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

其结果将是这...

<html> 
    <h2><test><LIST> 
        <ROLE>s1</ROLE> 
        <STATUS>yes</STATUS> 
       </LIST><LIST> 
        <ROLE>s1</ROLE> 
        <STATUS>yes</STATUS> 
       </LIST><LIST> 
        <ROLE>Member</ROLE> 
        <STATUS>yes</STATUS> 
       </LIST> 
    </test> 
    </h2> 
</html>