我有一個非常複雜的XQuery來編寫(至少按照我的標準)。非常複雜的XQuery轉換
這是我的輸入XML:
<testRequest>
<request1>
<Line>1</Line>
<action>addtoName</action>
</request1>
<request2>
<Line>2</Line>
<action>addtoSpace</action>
</request2>
<request3>
<Line>3<Line>
<action>addtospace</action>
</request3>
</testRequest>
以我輸出XML,動作應附作爲屬性的「request1」元素。因此,基於request1元素下的動作元素,爲request1元素的屬性應爲下列之一:
if action = IgnoreCase(addtoName), the request1 element should be <request1 action=insertingname>
if action = IgnoreCase(addtoSpace), the request1 element should be <request1 action=updatingspace>
不僅如此,而且,我需要的屬性添加到元素,基於在它下面的動作值。 所以,我必須遍歷元素下的每個元素,看看是否有任何元素等於「addtospace」,如果是,那麼我需要獲取元素的相應值並組成元素的屬性。從上面的XML,我的用於元件屬性應該是,
<testRequest lineFiller="Line Like 2_* AND Line Like 3_*>, where 2 and 3 are the respective line numbers.
和如果有與元件沒有元素= addtoSpace,則該元素的屬性應該被「改變」。
因此,總的來說,我轉換的XML應該是這樣的:
<testRequest lineFiller="Line Like 2_* AND Line Like 3_*>
<request1 action=insertingname>
<Line>1</Line>
<action>addtoName</action>
</request1>
<request2 action=updatingspace>
<Line>2</Line>
<action>addtoSpace</action>
</request2>
<request3 action=updatingspace>
<Line>3<Line>
<action>addtospace</action>
</request3>
</testRequest>
任何幫助來完成這個任務humungous將不勝感激。
謝謝!!!
ridermule,使用XSLT進行此類處理會更容易。您對XSLT解決方案感興趣嗎? – 2013-03-22 03:40:04
Dimitre,其實我對xslt非常熟悉......但不幸的是,上週有人打電話(當然不是我),我們應該只使用xqueries而不使用xslts。所以,我現在正在學習xqueries。 – ridermule 2013-03-22 13:58:14
ridermule,你有我的同情心。也許有時間去找另一份工作? :) – 2013-03-22 14:37:44