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 に答える