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()