2012-05-25 50 views
3

我不確定如何解決這個問題,因爲我對XSLT非常陌生。XSLT橫穿

我使用的是xsl:for-each循環通過Types,這是很好的,但是當我在這個循環(型)怎麼會用在TypeCode屬性我選擇Rate?我是否認爲選擇只有當時我所處的每一個範圍?可能還有很多包包元素。

<Bags> 
<Bag> 
    <Types> 
     <Type TypeCode="DBL"> 
      <Description Name="BLAH"> 
       <Text>BLAH</Text> 
       <Image/> 
      </Description> 
     </Type> 
     <Type TypeCode="JRS"> 
      <Description Name="BLAH"> 
       <Text>BLAH BLAH</Text> 
       <Image/> 
      </Description> 
     </Type> 
    </Types> 
    <Plans> 
     <Plan PlanCode="DISC" PlanName="Best rate"> 
      <Description Name="Best rate"> 
       <Text>Best available rate</Text> 
      </Description> 
     </Plan> 
     <Plan PlanCode="NOCC" PlanName="No CC Required"> 
      <Description Name="No CC Required"> 
       <Text>Rate- No CC Required</Text> 
      </Description> 
     </Plan> 
    </Plans> 
    <Rates> 
     <Rate TypeCode="DBL" PlanCode="DISC"> 
      <Rates> 
       <Rate> 
        <Base AmountBeforeTax="0" CurrencyCode="EUR"/> 
       </Rate> 
      </Rates> 
     </Rate> 
     <Rate TypeCode="JRS" PlanCode="DISC"> 
      <Rates> 
       <Rate> 
        <Base AmountBeforeTax="0" CurrencyCode="EUR"/> 
       </Rate> 
      </Rates> 
     </Rate> 
    </Rates> 
</Bag> 
    </Bags> 

回答

1

我說得對不對的思維選擇只具有的for-each,我在那個時候我在 的範圍是什麼?

不是真的,XPath表達式可以是相對,在這種情況下,將其評價關閉當前節點,或絕對(從/),在該情況下,它被評估關閉當前文檔節點。

即使使用相對XPath表達式,也可以選擇以當前節點爲根的子樹外部的節點 - 只需使用反向軸或following::following-sibling::軸即可。

使用

ancestor::Bag/Rates/Rate[@TypeCode = current()/@TypeCode] 

這假定袋不能嵌套,否則一個稍微不同的表達需要被使用:

ancestor::Bag[1]/Rates/Rate[@TypeCode = current()/@TypeCode] 
+0

乾杯對於快速響應,理解 – DazzlaJ

+0

@DazzlaJ:我很高興這個答案對你有用。您能否請*接受*(通過點擊答覆旁邊的複選標記)? –

+0

我只能說我已經注意到隨着時間的推移,Dimitre真的「得到」這個XSLT的東西:)並提供了很好的答案。查看他的答案列表! –