2011-09-12 117 views
0

我使用xslt將xml轉換爲json。 我遇到的問題是:如果一個特定的XML元素dosn't沒有兄弟姐妹它不會返回一個數組。xslt數組問題

 <xsl:if test="count(preceding-sibling::*[name() = name(current())]) = 0"> 
     <xsl:text>"</xsl:text><xsl:value-of select="name()" /><xsl:text>":</xsl:text> 
     <xsl:if test="count(following-sibling::*[name() = name(current())]) &gt; 0"> 
      <xsl:text>[</xsl:text> 
     </xsl:if> 
    </xsl:if> 

我想什麼是如果父的兄弟姐妹有具有相同的元件(一個或多個)作爲數組那麼這個元件也必須是一個數組。

所以我想的是:

<element> 
<child_element> 
    <grandchild_element> 
    only one 
    </grandchild_element> 
</child_element> 
<child_element> 
    <grandchild_element> 
    one 
    </grandchild_element> 
    <grandchild_element> 
    two 
    </grandchild_element> 
</child_element> 

我想下面的輸出

{ 
    "element": { 
     "child-element": [ 
      { 
       "grandchild_element": "only one" 
      } 
     ], 
     "child-element": [ 
      { 
       "grandchild_element": "one" , 
       "grandchild_element": "two" 
      } 
     ] 
    } 
} 

感謝

+0

提供輸入XML和所需的輸出。 –

+0

@kirill ... done –

回答

2

已經有相當定義映射嘗試幾次在XML和JSON之間,這不是一個小問題。我建議在嘗試對此轉換進行編碼之前,先研究一些現有建議的映射,並且如果您要執行不同的映射,則在開始編碼之前,請仔細指定它。

你打算碰到的一個問題是,如果你不知道模式,你會發現它很難知道何時輸出單個JSON對象以及何時輸出單個成員陣列。例如,如果某人有一個電話號碼,則會輸出一個值,但是如果他們有多個值,則會輸出一個數組:您無法知道何時看到一個電話號碼,無論收件人是否期待一個數組電話號碼。這不是一個編碼問題,這是一個問題,因爲XML實例中沒有足夠的信息來作出區分。

+0

我明白,但在這種情況下,我總是希望將特定元素映射爲數組。在上面的例子中是子元素的子元素。 –

+0

謝謝,需要我的頭腦。解決方案是在xml中創建一個推斷數組的屬性。 –