#G. Ken Holman's <gkholman@CraneSoftwrights.com>'s illustration of the fact that elements are the principal node type along the attribute axis

from Xslt import test_harness

sheet_and_source = """<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:dummy="dummy"
                 exclude-result-prefixes="dummy"
                 version="1.0">

<xsl:output method="text"/>

<dummy:data>
   <hello att1="att1-val" att2="att2-val" att3="att3-val"/>
</dummy:data>

<xsl:template match="/">                         <!--root rule-->
   <xsl:for-each select="document('')//hello">
     <xsl:text>Using self::</xsl:text>
     <xsl:for-each select="@*[not(self::att2)]" xml:space="preserve">
       <xsl:value-of select="name(.)"/>-<xsl:value-of select="."/>
     </xsl:for-each>
     <xsl:text>&#xa;Using self::</xsl:text>
     <xsl:for-each select="@*[name(.)!='att2']" xml:space="preserve">
       <xsl:value-of select="name(.)"/>-<xsl:value-of select="."/>
     </xsl:for-each>
   </xsl:for-each>
</xsl:template>

</xsl:stylesheet>"""

xt_output = """Using self::
       att1-att1-val
     
       att2-att2-val
     
       att3-att3-val
     
Using self::
       att1-att1-val
     
       att3-att3-val
     
"""

     
expected_1 = """Using self::
       att2-att2-val
     
       att3-att3-val
     
       att1-att1-val
     
Using self::
       att3-att3-val
     
       att1-att1-val
     """


def Test(tester):


    tester.startGroup("Borrowed: gkh_20001016")
    source = test_harness.FileInfo(string=sheet_and_source)
    sty = test_harness.FileInfo(string=sheet_and_source)
    xtest = test_harness.XsltTester(source,
                                    [sty],
                                    expected_1,
                                    compareFunc = cmp,
                                    )

    xtest.test(tester)
    tester.groupDone()
    return
    