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