我做了一個艱難的時期制定的問題標題。也許這個例子會更有意義。XSLT 1.0 - 合併與子節點的兄弟節點爲新的複合節點
假設我有一個看起來像這樣的系統中的一個XML文檔:
<root>
<phone_numbers>
<phone_number type="work">123-WORK</phone_number>
<phone_number type="home">456-HOME</phone_number>
<phone_number type="work">789-WORK</phone_number>
<phone_number type="other">012-OTHER</phone_number>
</phone_numbers>
<email_addresses>
<email_address type="home">[email protected]</email_address>
<email_address type="other">[email protected]</email_address>
<email_address type="home">[email protected]</email_address>
<email_address type="work">[email protected]</email_address>
<email_address type="other">[email protected]</email_address>
<email_address type="other">[email protected]</email_address>
</email_addresses>
</root>
而且我必須適應這些成這樣,使他們可以在系統B中使用的結構:
<root>
<addresses>
<address name="work1">
<phone_number>123-WORK</phone_number>
<email_address>[email protected]</email_address>
</address>
<address name="work2">
<phone_number>789-WORK</phone_number>
</address>
<address name="other1">
<phone_number>012-OTHER</phone_number>
<email_address>[email protected]</email_address>
</address>
<address name="other2">
<email_address>[email protected]</email_address>
</address>
<address name="other3">
<email_address>[email protected]</email_address>
</address>
<address name="home1">
<phone_number>456-HOME</phone_number>
<email_address>[email protected]</email_address>
</address>
<address name="home2">
<email_address>[email protected]</email_address>
</address>
</addresses>
</root>
可以有任何數(從0到無窮大,因爲據我所知),每種類型的電子郵件地址。此外,還可以是任意數量的每種類型的電話號碼,和一種類型的電話號碼的數量不必匹配相同類型的電子郵件地址的數量。
第一文檔中的電子郵件地址和電話號碼是不是真的彼此相關,但它們在它們添加到系統A的順序輸入
我要配對的電子郵件和電話數字增長型以適應系統B,我想它們配對,使X型的第一個電話號碼是搭配X型的第一個電子郵件地址等X型的沒有電話號碼是搭配的電子郵件比十,其他類型的
因爲我有配對起來,由於他們的順序被輸入到系統中,我會去尋找對之間的關系最密切,我想訂購他們THI的方式。我必須告訴用戶去查看結果,確保它們有意義,但我必須將它們配對 - 別無選擇。
使事情複雜化,我的實際XML文檔有更多的節點,我需要與phone_numbers和email_addresses合併,並且我有兩個以上的@types
。
另外一個注意:我已經計算節點的最大數量與任何給定的@type
,所以我的例子文檔,我知道一個@type
的<address>
節點的最大數目爲3(三級<email_address>
與@type=other
節點=與@name=otherX
3個<address>
節點)。
類型的順序是否重要? 「other」類型在第二個「email_address」或第四個「phone_number」之前不會出現,但該類型在輸出中是第二個。 – 2011-05-13 20:45:27
類型的訂購無關緊要。 – Tex 2011-05-13 21:51:08
好問題,+1。看到我的解決方案相當簡單的解決方案:) – 2011-05-14 02:28:42