File size: 1,795 Bytes
a65138c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# -*- coding: utf-8 -*-

import unittest

from java.lang import System
from java.io import File
from java.io import ByteArrayOutputStream
from javax.xml.parsers import DocumentBuilderFactory
from javax.xml.transform import TransformerFactory
from javax.xml.transform.dom import DOMSource
from javax.xml.transform.stream import StreamSource
from javax.xml.transform.stream import StreamResult

dbfac = DocumentBuilderFactory.newInstance()
dbfac.namespaceAware = True
docfac = dbfac.newDocumentBuilder()
print type(dbfac)

transfac = TransformerFactory.newInstance()

src_dom = docfac.parse('hello.xml')
src_source = DOMSource(src_dom)


def unsigned_byte(x):
    if x < 0:
        return 256 + x
    return x


def Transformer(xsl_source):
    transformer = transfac.newTransformer(xsl_source)
    def transform(src_source):
        outputstream = ByteArrayOutputStream()
        dst_result = StreamResult(outputstream)
        transformer.transform(src_source, dst_result)
        return ''.join(chr(unsigned_byte(x)) for x in outputstream.toByteArray())
    return transform


def transform(xsl_source, src_source):
    transform = Transformer(xsl_source)
    return transform(src_source)


class TestXSLT(unittest.TestCase):

    xsl_path = 'xsl/import-test.xsl'

    def test_xsl_dom(self):

        xsl_dom = docfac.parse(self.xsl_path)
        # DOMSource with System Id
        xsl_source = DOMSource(xsl_dom, self.xsl_path)

        result = transform(xsl_source, src_source)
        #print result
        self.assertTrue('world' in result)

    def test_xsl_stream(self):
        xsl_source = StreamSource(self.xsl_path)

        result = transform(xsl_source, src_source)
        #print result
        self.assertTrue('world' in result)


if __name__ == '__main__':
    unittest.main()