Hello,
This is input XML:
<employee emp="1" dept="55"> <name>Peter</name> <job>Director</job> <employee emp="12" dept="26"> <name>John</name> <job>Animator</job> <employee emp="123" dept="27"> <name>James</name> <job>Assistant</job> </employee> </employee> </employee>
Desired output XML:
<employee emp="1" dept="55"> <name>Peter</name> <job>Director</job> </employee>
Overall, it is a so called 'modified identity transformation' in XSLT parlance.
Output XML shall be the same, except the child <employee> element and its children.
Question:
What is the best way to re-create existing root element with all its attributes?
My implementation:
xquery version "3.1";
declare context item := document {
<employee emp="1" dept="55">
<name>Peter</name>
<job>Director</job>
<employee emp="12" dept="26">
<name>John</name>
<job>Animator</job>
<employee emp="123" dept="27">
<name>James</name>
<job>Assistant</job>
</employee>
</employee>
</employee>
};
(: working version :)
element {fn:node-name(/*)}
{
let $y := ./*/@*
return $y, (: copy all attributes :)
for $x in ./*/(* except employee)
return $x
}
(: NOT working version, trying to make it more concise :)
element {fn:node-name(/*)} {/*/@*}
{
return for $x in ./*/(* except employee)
return $x
}
Regards, Yitzhak Khabinsky