dm_20010815.py :  » XML » 4Suite » 4Suite-XML-1.0.2 » test » Xml » Xslt » Borrowed » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » XML » 4Suite 
4Suite » 4Suite XML 1.0.2 » test » Xml » Xslt » Borrowed » dm_20010815.py
#From David_Marston@lotus.com of Xalan

from Xml.Xslt import test_harness

sheet_1 = """<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     version='1.0'
     xmlns:x="http://namespaces.ogbuji.net/articles">

  <!-- FileName: idkey53 -->
  <!-- Document: http://www.w3.org/TR/xslt -->
  <!-- DocVersion: 19991116 -->
  <!-- Section: 12.2 -->
  <!-- Creator: Uche Ogbuji, adapted by David Marston -->
  <!-- Purpose: Test combination of key() and document() reading from stylesheet. -->
  <!-- Elaboration: "Look-up table 1.6 is worth a close look because it uses an advanced XSLT
    technique. It builds up the lookup-table right in the stylesheet, using a distinct namespace.
    You can see the x:ns-to-binding elements right below the key. If you are familiar with keys,
    you are aware that they define indices that will be built on the nodes in the original source
    document that match the pattern in the match attribute. What is not as well known is that
    every time an additional source document is loaded with the XSLT document() function, all keys
    are applied to it as well. The xsl:variable...uses a special form of document() call to load
    the stylesheet itself as an additional source document. Thus the nodes in the stylesheet that
    match the ns-to-binding are indexed. This is a very useful technique for setting up a look-up
    table without having to hack at the source document or depend on an additional file." -->

<xsl:output method='xml'/>

  <!-- Lookup table 1.6: WSDL binding types -->
  <xsl:key name='ns-to-binding' match='x:ns-to-binding' use='@binding'/>
  <x:ns-to-binding uri='http://schemas.xmlsoap.org/wsdl/soap/' binding='SOAP'/>
  <x:ns-to-binding uri='http://schemas.xmlsoap.org/wsdl/mime/' binding='MIME'/>
  <x:ns-to-binding uri='http://schemas.xmlsoap.org/wsdl/http/' binding='HTTP'/>

<xsl:template match='doc'>
  <out>
    <xsl:apply-templates/>
  </out>
</xsl:template>

<xsl:template match="bind">
  <bound>
    <xsl:variable name="lookup" select="."/>
    <xsl:value-of select="$lookup"/><xsl:text>- </xsl:text>
    <xsl:for-each select="document('')"><!-- Switch context so key reads from stylesheet -->
      <xsl:value-of select="key('ns-to-binding',$lookup)/@uri"/>
    </xsl:for-each>
  </bound>
</xsl:template>

</xsl:stylesheet>
"""
        
source_1 = """<?xml version="1.0"?>
<doc>
  <bind>HTTP</bind>
  <bind>SOAP</bind>
</doc>
"""

expected_1 = """<?xml version='1.0' encoding='UTF-8'?>\n<out xmlns:x='http://namespaces.ogbuji.net/articles'>\n  <bound>HTTP- http://schemas.xmlsoap.org/wsdl/http/</bound>\n  <bound>SOAP- http://schemas.xmlsoap.org/wsdl/soap/</bound>\n</out>"""


def Test(tester):
    source = test_harness.FileInfo(string=source_1)
    sheet = test_harness.FileInfo(string=sheet_1)
    test_harness.XsltTest(tester, source, [sheet], expected_1,
                          title="Dave Marston's nuances on keys and document()")
    return

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.