我處於一種情況,我收到一個包含XML字符串的查詢。我應該把它轉換成json。是否有可能在ColdFusion Fusion 8中將XML字符串轉換爲JSON
我寫了一個小的CF函數,它遍歷/解析XML並將其方便地轉換爲json。現在的問題是,XML模式已經改變,這迫使我重新編寫CF函數以適應新的模式。
有沒有更好的/通用的方式將XML轉換成json? (儘管使用ColdFusion!)
我處於一種情況,我收到一個包含XML字符串的查詢。我應該把它轉換成json。是否有可能在ColdFusion Fusion 8中將XML字符串轉換爲JSON
我寫了一個小的CF函數,它遍歷/解析XML並將其方便地轉換爲json。現在的問題是,XML模式已經改變,這迫使我重新編寫CF函數以適應新的模式。
有沒有更好的/通用的方式將XML轉換成json? (儘管使用ColdFusion!)
有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)>
今天得到了這個工作,不得不導入當前的撒克遜語庫並編寫一個小的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();
}
感謝您的迴應。我正在使用冷聚變8,我得到以下錯誤(我使用了XSLT v2.0):( – novein 2011-05-24 08:48:47
'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
@novein:哦,看起來XSLT是版本2.0,而ColdFusion (原生)只支持XSLT 1.0,我必須承認我沒有檢查過。 - 對不起。 – Tomalak 2011-05-24 17:03:32