我有一個看起來像這樣的XML文檔中確定上下文節點的位置:另一個節點集
<Root>
<Cover>
<Cover_Ref Val="1"/>
<Cover_Code Val="Food in transit"/>
<AdditionalCover>
<AdditionalCover_Area Val="Sussex"/>
</AdditionalCover>
</Cover>
<Cover>
<Cover_Ref Val="2"/>
<Cover_Code Val="Frozen goods"/>
</Cover>
<Cover>
<Cover_Ref Val="3"/>
<Cover_Code Val="Business equipment"/>
<AdditionalCover>
<AdditionalCover_Area Val="Sussex"/>
</AdditionalCover>
</Cover>
<AdditionalCoverResult>
<CoverArea Val="Sussex"/>
<CoverExcluded Val="N"/>
</AdditionalCoverResult>
<AdditionalCoverResult>
<CoverArea Val="Sussex"/>
<CoverExcluded Val="Y"/>
</AdditionalCoverResult>
</Root>
我需要把它改造成這樣的:
<Insurances>
<Insurance>
<reference>1</reference>
<CoverType>Food in transit</CoverType>
<Region>Sussex</Region>
<Excluded>N</Excluded>
</Insurance>
<Insurance>
<reference>2</reference>
<CoverType>Frozen goods</CoverType>
</Insurance>
<Insurance>
<reference>3</reference>
<CoverType>Business equipment</CoverType>
<Region>Sussex</Region>
<Excluded>Y</Excluded>
</Insurance>
</Insurances>
的AdditionalCoverResult元素指包含AdditionalCover元素的封面元素 - 因此第一個封面元素的封面不排除,而第三個封面元素的封面不包括在內。第二個封面元素沒有AdditionalCover,因此沒有引用它的AdditionalCoverResult元素。
我的問題是,在<xsl:for-each select="//Cover">
循環內,我想不出一種方法來確定我應該尋找哪個AdditionalCoverResult元素。在每個結尾中使用position()
與我不正確地輸出AdditionalCoverResult信息爲一個沒有AdditionalCover的封面元素。
我必須保留Cover的原始順序,所以我不能做兩個單獨的循環,一個用於CoverCover和另一個用於Cover without AdditionalCover。
在由//Cover
返回的節點集內有沒有一種方法可以識別上下文節點在由//Cover[AdditionalCover]
返回的節點集內的位置?
我有點猜測,對於Cover元素,我需要考慮「我在//Cover[AdditionalCover]
內部有哪些索引,以便我可以使用該索引來標識我的對應AdditionalCoverResult元素?」
嗨,尼克,我遇到的問題是,兩個封面元素與CoverCover的CoverArea值是相同的 - 他們都是「蘇塞克斯」。這就是爲什麼我不得不嘗試在另一個節點集內找到我的上下文節點的索引。 –