1
我想使用XSLT將XML文件的一部分移動到另一個節點。 我只想移動開始某個節點的所有內容。 最好通過一個例子來解釋。從某個節點開始的XSLT複製
這將是輸入XML(它只是一個樣本)
<Messages>
<Message>
<Header>
<Name>Message Content 1</Name>
</Header>
<Info1>
<Description>blabla</Description>
</Info1>
<Info2>
<Name>Test</Name>
<Description>blabla</Description>
</Info2>
... Possible more nodes (with random names)
<Header>
<Name>Message Content Summary</Name>
</Header>
<Info1>
<Total>blablabla</Total>
</Info1>
... Possible more nodes (with random names)
</Message>
</Messages>
我想獲得以下輸出:
<Messages>
<Message>
<Header>
<Name>Message Content 1</Name>
</Header>
<Info1>
<Description>blabla</Description>
</Info1>
<Info2>
<Name>Test</Name>
<Description>blabla</Description>
</Info2>
... Possible more nodes (with random names)
</Message>
<MessageSummary>
<Header>
<Name>Message Content Summary</Name>
</Header>
<Info1>
<Total>blablabla</Total>
</Info1>
... Possible more nodes (with random names)
</MessageSummary>
</Messages>
所以我想移動一切從最後一次出現開始將節點「Header」分解爲單獨的節點「MessageSummary」。
有什麼辦法可以使用XSLT 1.0來完成這個任務嗎? 任何幫助將不勝感激。
謝謝。
嗨,謝謝你的建議。我修改了一下,所以第一個副本選擇* [following-sibling :: Header [1]] ==>需要複製第一個頭部下的所有項目。第二個副本選擇:* [not(after-sibling :: Header [2])] ==>第二個標題下的所有項目都需要複製到摘要節點。它似乎工作正常:) –
@Rise_against不會完全做你所描述的,因爲兄弟姐妹軸上的數字謂詞計算兄弟姐妹 - '* [not(following-sibling :: Header [2])]'find all all elements在它們之後至少有兩個標題,所以在倒數第二個標題之前的元素,而不是第二個標題。如果你想使用第二個標題作爲截斷點,那麼你需要像第一部分的'Header [2]/preceding-sibling :: *'和'Header [2] |第二個是[Header [2]/following-sibling :: *']。 –
嗨伊恩,你是對的!忘記我最後一句話,你的解決方案正常工作!起初它不起作用是我的錯(在XSLT中做了一些拼寫錯誤)。但糾正後,它按預期工作。再次感謝您的幫助! –