2016-02-02 121 views
0

我想根據字段值person_id_external對xml進行排序。在xslt中排序不起作用

,我正在使用的代碼是:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="A/B"> 
    <xsl:copy> 
     <xsl:apply-templates> 
      <xsl:sort select="C/person_id_external" order="ascending" />   
     </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

有效載荷是:

<A> 
    <B> 
     <C> 
      <logon_user_name>10027</logon_user_name> 
      <person_id>1100111</person_id> 
      <person_id_external>10027</person_id_external> 
     </C> 
    </B> 
    <B> 
     <C> 
      <logon_user_name>428122</logon_user_name> 
      <person_id>11141</person_id> 
      <person_id_external>111358</person_id_external> 
     </C> 
    </B> 
    <B> 
     <C> 
      <logon_user_name>428122</logon_user_name> 
      <person_id>100441</person_id> 
      <person_id_external>10636</person_id_external> 
     </C> 
    </B> 
</A> 

結果提供輸入的副本,但不排序。

預期結果是:

<A> 
    <B> 
     <C> 
      <logon_user_name>10027</logon_user_name> 
      <person_id>1100111</person_id> 
      <person_id_external>10027</person_id_external> 
     </C> 
    </B> 
    <B> 
     <C> 
      <logon_user_name>428122</logon_user_name> 
      <person_id>11141</person_id> 
      <person_id_external>10636</person_id_external> 
     </C> 
    </B> 
    <B> 
     <C> 
      <logon_user_name>428122</logon_user_name> 
      <person_id>100441</person_id> 
      <person_id_external>111358</person_id_external> 
     </C> 
    </B> 
</A> 

乾杯, Vikcy

+1

您的問題不清楚。請舉例說明多個項目進行排序。 - **提示:** XML區分大小寫:'Person'與''不匹配。 –

+0

嗨邁克爾,提交P帽名稱的人是一個錯字。在改變這個結果也沒有排序。關於有效載荷,CompoundEmployee根將出現多次,並且將只有一個person_id_external字段存在的person節點。 – Vicky

+0

請不要在註釋中發佈代碼 - 而是編輯您的問題。 –

回答

0

- 響應於您的編輯編輯 -

在您的例子中,每個B節點只有一個C節點。因此,你必須按順序B節點進行排序,以獲得預期的結果 - 你必須從其父A的情況下這樣做的:

<xsl:template match="A"> 
    <xsl:copy> 
     <xsl:apply-templates> 
      <xsl:sort select="C/person_id_external" order="ascending"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 

注意,默認排序的數據類型是text(即按字母順序排列) 。

+0

以上試過,,,不工作 – Vicky

+0

我已經更新了你建議的帖子 – Vicky

+0

沒有工作Michael – Vicky

0

在下面的代碼的工作原理:

<xsl:template match="A"> 
<xsl:copy> 
    <xsl:apply-templates> 
     <xsl:sort select="C/person_id_external" data-type="number" order="ascending"/> 
    </xsl:apply-templates> 
</xsl:copy> 

傳入淨荷有類型數。

乾杯, Vikas Singh