-1
<a id="aId" deleted="false">
    <b id="bIdOne" deleted="false">
        <c>cValue</c>
        <d id="dId" deleted="true">
            <e>eValue</e>
        </d>
        <f id="fId" deleted="false">
            <g>gValue</g>
        </f>
    </b>
    <b id="bIdTwo" deleted="true">
        <c>cValue</c>
        <d id="dId" deleted="true">
            <e>eValue</e>
        </d>
        <f id="fId" deleted="false">
            <g>gValue</g>
        </f>
    </b>
    <b id="bIdThree" deleted="false">
        <c>cValue</c>
        <d id="dId" deleted="true">
            <e>eValue</e>
        </d>
        <f id="fId" deleted="true">
            <g>gValue</g>
        </f>
    </b>
    <Y><yValue</Y>
</a>

Expected Output :

retrieve list of b and its child where deleted attribute is false, Expected output is below

query should be something like : for $x in $data//descendant::[(@deleted=\"false\" or empty(@deleted))] return $x/b";

<b id="bIdOne" deleted="false">
    <c>cValue</c>
        <f id="fId" deleted="false">
            <g>gValue</g>
        </f>
</b>
<b id="bIdThree" deleted="false">
    <c>cValue</c>
    <Y><yValue</Y>
</b>
Nikhil
  • 9
  • 3

1 Answers1

0

You are probably looking for something like this:

let $data := [your code above, fixed - your <Y> is in the wrong place for your output]

return
element root 
  {    
   for $e1 in $data//b[@deleted="false"] 
   let $dat :=$e1//*[not(@deleted="true")][not(ancestor::*[@deleted="true"])]

   return
   element{name($e1)}{$e1/@*,$dat}      
  }

Output should be your desired output.

Jack Fleeting
  • 24,385
  • 6
  • 23
  • 45