2011-05-23 33 views
3

我处于一种情况,我收到一个包含XML字符串的查询。我应该把它转换成json。是否有可能在ColdFusion Fusion 8中将XML字符串转换为JSON

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

有没有更好的/通用的方式将XML转换成json? (尽管使用ColdFusion!)

回答

5

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)> 
+0

感谢您的回应。我正在使用冷聚变8,我得到以下错误(我使用了XSLT v2.0):( – novein 2011-05-24 08:48:47

+0

'javax.xml.transform.TransformerConfigurationException:javax.xml.transform.TransformerException:javax.xml。 transform.TransformerException:xsl:param元素不允许使用“as”属性! 无法创建满足所请求的配置的Transformer对象,这可能是由于编译XSL文本时失败。javax.xml.transform。 TransformerConfigurationException:javax.xml.transform.TransformerException:javax.xml.transform.TransformerException:xasl:param元素不允许使用“as”属性! – novein 2011-05-24 08:49:03

+0

@novein:哦,看起来XSLT是版本2.0,而ColdFusion (原生)只支持XSLT 1.0,我必须承认我没有检查过。 - 对不起。 – Tomalak 2011-05-24 17:03:32

1

今天得到了这个工作,不得不导入当前的撒克逊语库并编写一个小的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(); 
} 
相关问题