2013-10-31 54 views
0

我有這樣的XML:遞歸XSLT轉換XML簡化

<org.mule.module.json.JsonData> 
    <node class="org.codehaus.jackson.node.ObjectNode"> 
    <__nodeFactory/> 
    <__children> 
     <entry> 
     <string>freshdesk_webhook</string> 
     <org.codehaus.jackson.node.ObjectNode> 
      <__nodeFactory reference="../../../../__nodeFactory"/> 
      <__children> 
      <entry> 
       <string>ticket_id</string> 
       <org.codehaus.jackson.node.IntNode> 
       <__value>7097</__value> 
       </org.codehaus.jackson.node.IntNode> 
      </entry> 
      <entry> 
       <string>ticket_requester_email</string> 
       <org.codehaus.jackson.node.TextNode> 
       <__value>[email protected]</__value> 
       </org.codehaus.jackson.node.TextNode> 
      </entry> 
      </__children> 
     </org.codehaus.jackson.node.ObjectNode> 
     </entry> 
    </__children> 
    </node> 
</org.mule.module.json.JsonData> 

我需要用XSLT轉換它:

<root> 
    <entry> 
    <name>freshdesk_webhook</name> 
    <value> 
     <entry> 
     <name>ticket_id</name> 
     <value>7097</value> 
     </entry> 
     <entry> 
     <name>ticket_requester_email</name> 
     <value>[email protected]</value> 
     </entry> 
    </value> 
    </entry> 
</root> 

轉型是很容易相信。但是我今天測試了很多XSLT,並且還沒有結果。如何獲得遞歸XSLT將我沉重的XML轉換爲簡單的XML?

請幫忙。

回答

3

這很簡單,這要歸功於XSLT的built in template rules元素只是在沒有明確匹配特定節點的情況下繼續處理子元素,而文本節點的默認規則只是輸出文本。這樣的映射變得

  • 頂級文檔元素 - >root
  • entry - >entry
  • 每個條目的
  • 第一個子元素 - >name
  • 每個條目的第二子元件 - >value

和其他一切只是使用默認的「繼續與我的孩子」規則

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:strip-space elements="*" /> 
    <xsl:output indent="yes" /> 

    <xsl:template match="/*"> 
    <root><xsl:apply-templates /></root> 
    </xsl:template> 

    <xsl:template match="entry"> 
    <entry><xsl:apply-templates /></entry> 
    </xsl:template> 

    <xsl:template match="entry/*[1]"> 
    <name><xsl:apply-templates /></name> 
    </xsl:template> 

    <xsl:template match="entry/*[2]"> 
    <value><xsl:apply-templates /></value> 
    </xsl:template> 
</xsl:stylesheet> 

xsl:strip-space是重要的,因爲使所述樣式表來忽略輸入XML(唯一空白文本節點)中的所有凹槽和集中只是在元件和顯著文本(string__value的內容元件)。

+0

謝謝!那很好! –