是否可以在ColdFusion Fusion 8中将XML字符串转换为JSON

时间:2011-05-23 15:27:34

标签: xml json coldfusion-8

我遇到的情况是,我收到一个包含XML字符串的查询。我应该把它转换成json。

我编写了一个小的CF函数,它遍历/解析XML并方便地将其转换为json。现在的问题是,XML模式已被更改,这迫使我重新编写CF函数以适应新模式。

是否有更好/通用的方法将XML转换为json? (尽管使用ColdFusion!)

2 个答案:

答案 0 :(得分:6)

XSLTJSON

下载XSLT样式表并将其与ColdFusion的XmlTransform() function一起使用。

<cfset xmlDoc  = XmlParse(yourXmlString, true)>

<cfset params  = StructNew()>
<cfset params["any-param"] = "you wish to pass to the XSL processor">

<cfset jsonStr = XmlTransform(xmlDoc, "xml-to-json.xsl", params)>

答案 1 :(得分:1)

今天有这个工作,不得不导入当前的Saxon libs并编写一个小的java帮助文件。

public static String transformXML(String xmlData, String xslFile) throws SaxonApiException 
{

    StringWriter sw = new StringWriter();
    XdmNode source = null;

    Processor proc = new Processor(false);
    XsltCompiler comp = proc.newXsltCompiler();
    XsltExecutable exp = comp.compile(new StreamSource(new File(xslFile)));

    try
    {
        source = proc.newDocumentBuilder().build(new StreamSource(new ByteArrayInputStream(xmlData.getBytes("UTF-8"))));
    }
    catch (UnsupportedEncodingException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Serializer out = proc.newSerializer(sw);
    //out.setOutputProperty(Serializer.Property.METHOD, "html");
    out.setOutputProperty(Serializer.Property.INDENT, "yes");
    XsltTransformer trans = exp.load();
    trans.setInitialContextNode(source);
    trans.setDestination(out);
    trans.transform();

    return sw.toString();
}