class XMLEmitter(JSONBaseListener):

    def __init__(self):
        self.xml = ParseTreeProperty()

    def getXML(self, ctx):
        return self.xml.get(ctx)

    def setXML(self, ctx, s):
    #		print "setXML(", ctx,",", s, ")"
        self.xml.put(ctx, s)

    def exitJson(self, ctx):
        self.setXML(ctx, self.getXML(ctx.getChild(0)))

    def exitAnObject(self, ctx):
        buf = "\n"
        for pctx in ctx.pair():
            buf = ''.join(self.getXML(pctx))
        self.setXML(ctx, buf)

    def exitEmptyObject(self, ctx):
        self.setXML(ctx, "")

    def exitArrayOfValues(self, ctx):
        buf = "\n"
        for vctx in ctx.value():
            buf = ''.join(["<element>", self.getXML(vctx), "</element>", "\n"])
        self.setXML(ctx, buf)

    def exitEmptyArray(self, ctx):
        self.setXML(ctx, "")

    def exitPair(self, ctx):
        tag = self.stripQuotes(ctx.STRING().getText())
        vctx = ctx.value()
        x = "<%s>%s</%s>\n" % (tag, self.getXML(vctx), tag)
        self.setXML(ctx, x)

    def exitObjectValue(self, ctx):
        self.setXML(ctx, self.getXML(ctx.object()))

    def exitArrayValue(self, ctx):
        self.setXML(ctx, self.getXML(ctx.array()))

    def exitAtom(self, ctx):
        self.setXML(ctx, ctx.getText())

    def exitString(self, ctx):
        self.setXML(ctx, self.stripQuotes(ctx.getText()))

    def stripQuotes(self, s):
        if s == None or s[0] != '"':
            return s
        return s[1:-1]	
class XMLEmitter(JSONBaseListener):
    def __init__(self):
        self.xml = ParseTreeProperty()

    def getXML(self, ctx):
        return self.xml.get(ctx)

    def setXML(self, ctx, s):
        #		print "setXML(", ctx,",", s, ")"
        self.xml.put(ctx, s)

    def exitJson(self, ctx):
        self.setXML(ctx, self.getXML(ctx.getChild(0)))

    def exitAnObject(self, ctx):
        buf = "\n"
        for pctx in ctx.pair():
            buf = ''.join(self.getXML(pctx))
        self.setXML(ctx, buf)

    def exitEmptyObject(self, ctx):
        self.setXML(ctx, "")

    def exitArrayOfValues(self, ctx):
        buf = "\n"
        for vctx in ctx.value():
            buf = ''.join(["<element>", self.getXML(vctx), "</element>", "\n"])
        self.setXML(ctx, buf)

    def exitEmptyArray(self, ctx):
        self.setXML(ctx, "")

    def exitPair(self, ctx):
        tag = self.stripQuotes(ctx.STRING().getText())
        vctx = ctx.value()
        x = "<%s>%s</%s>\n" % (tag, self.getXML(vctx), tag)
        self.setXML(ctx, x)

    def exitObjectValue(self, ctx):
        self.setXML(ctx, self.getXML(ctx.object()))

    def exitArrayValue(self, ctx):
        self.setXML(ctx, self.getXML(ctx.array()))

    def exitAtom(self, ctx):
        self.setXML(ctx, ctx.getText())

    def exitString(self, ctx):
        self.setXML(ctx, self.stripQuotes(ctx.getText()))

    def stripQuotes(self, s):
        if s == None or s[0] != '"':
            return s
        return s[1:-1]
 def __init__(self):
     self.xml = ParseTreeProperty()
 def __init__(self):
     self.xml = ParseTreeProperty()