2016-11-17 55 views
1

我有與結構的一些元素如下面的請求:XSLT 2.0跳過所有元件,除了一個

<Request> 
     <Other> 
     ... 
     </Other> 
     <Qualifiers> 
     <Options> 
      <Segment Number="1"/> 
     </Options> 
     <Offer> 
      <Column ColumnNumber="2.1"/> 
      <Record Number="2"/> 
     </Offer> 
     <Offer> 
      <Column ColumnNumber="1.1"/> 
      <Column EndColumnNumber="4.1" ColumnNumber="3.1"/> 
      <Record Number="1"/> 
     </Offer> 
     <Offer> 
      <Column ColumnNumber="5.1"/> 
      <Record Number="3"/> 
     </Offer> 
     <Fare> 
      <Basis>ABCDE</Basis> 
     </Fare> 
     </Qualifiers> 
     <Other> 
     ... 
     </Other> 
</Request> 

從這個有效載荷我需要做,在每個單個呼叫要約元件3個單獨的請求。請求的其餘部分應在不改變被複制,所以首先向我的請求應該看起來像這樣:

<Request> 
     <Other> 
     ... 
     </Other> 
     <Qualifiers> 
     <Options> 
      <Segment Number="1"/> 
     </Options> 
     <Offer> 
      <Column ColumnNumber="2.1"/> 
      <Record Number="2"/> 
     </Offer> 
     <Fare> 
      <Basis>ABCDE</Basis> 
     </Fare> 
     </Qualifiers> 
     <Other> 
     ... 
     </Other> 
</Request> 

第二和第三類比與第二和第三發售元素。

我使用駱駝,所以我試圖讓它在循環提供XSLT參數,它是應該留下的元素的索引。所以,我試過了:

<xsl:template match="node()|@*"> 
      <xsl:copy> 
       <xsl:apply-templates select="@*|node()" /> 
      </xsl:copy> 
</xsl:template> 

<xsl:template match="/Request/Qualifiers/Offer[not($MY_IDX)]"/> 

其中$MY_IDX是索引。經過一番搜索之後,我意識到它不會起作用,因爲not()函數僅接受並返回布爾值。 有沒有其他的方法來存檔我的目標?

回答

1

而不是

<xsl:template match="/Request/Qualifiers/Offer[not($MY_IDX)]"/> 

使用

<xsl:template match="/Request/Qualifiers/Offer[position() != $MY_IDX]" /> 

這抑制了所有,但其位置由$MY_IDX給出的Offer

+0

謝謝!完美的作品 – Araneo