2014-10-22 145 views
0

我遇到了一個需求,我需要根據XSLT將轉移JSON數據轉換爲各種XML文檔。 實際上,同樣的json數據會傳到不同的系統,並且他們有自己的對象結構(屬性嵌套級別等)來存儲它。我使用C#中的XslCompiledTransform()將Xml轉換爲Json;我使用XslCompiledTransform()現在看看是否有任何有效的方法將JSON轉換爲XML 使用XSLT使用XSLT將JSON轉換爲XML

+0

您的問題太寬了,我很害怕。另外,XSLT可能是一個相當差的選擇,因爲它意味着將XML文檔轉換爲其他方式,而不是其他方式。如果您已經在C#中有工作解決方案,爲什麼您需要開始使用XSLT? – 2014-10-22 08:01:33

+0

@MathiasMüller:實際上,有一種情況是相同的json數據發送到不同的系統,並且他們有自己的對象結構(屬性嵌套級別等)來存儲它。 – 2014-10-22 08:06:16

+0

我認爲我們需要更多的細節才能夠幫助你。由於XSLT將xml文檔作爲輸入,它不應該是您第一次將JSON轉換爲XML的調用。但是,如果您仍然需要,您可以使用虛擬XML文檔(又名:作爲內容)輸入到您的XSLT並使用XSLT函數:unparsed-text($ documentURI,$ encodage)來訪問您的JSON。但是您仍然需要以原始字符串的形式訪問JSON數據的內容。 – 2014-10-22 10:18:06

回答

0

XSLT是一個XML文檔切換到另一個XML文檔,但是,JSON甚至不是一個XML類型的文件..

您可以編寫一個簡單的應用程序傳輸格式

0

撇開事實,XSLT是絕對不適合工作的工具,這裏是一個僞的方法如何,我會做,如果我曾經到:

  • 在C#中創建一個擴展函數來完成真正的工作,即獲取JSON字符串作爲參數,返回一個通用的XPathNodeIterator XML塊。
  • 用XSLT正常處理返回最終的自定義轉換格式。

的XSLT會再看看這樣的事情(假設XSLT 1.0,因爲在C#是):

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:util="urn:JsonUtility.Converter" 
> 
    <!-- Supplied from environment --> 
    <xsl:param name="json" /> 

    <xsl:template match="/"> 
     <xsl:variable name="xml" select="util:JSON2XML($json)" /> 

     <!-- Start processing the returned XML --> 
     <xsl:apply-templates select="$xml/json" /> 
    </xsl:template> 

    <xsl:template match="key"> 
     <!-- output --> 
    </xsl:template> 

    <xsl:template match="array"> 
     <!-- output --> 
    </xsl:template> 

    <!-- etc. --> 

</xsl:stylesheet> 

(或者,如果你在C#擴展創建最終的格式,你可以只請在根目錄模板中執行<xsl:copy-of select="$xml" />)。