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>

但我只得到元素的值。我需要检索具有值的当前元素。有人知道吗

4

2 回答 2

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>
于 2012-10-17T13:31:02.080 回答
0

采用...

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

并删除不匹配的 xsl:if 像这样...

<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>
于 2012-10-17T12:22:13.270 回答