1

I have this leaf structure and I Want to remove leafs that have attribute:d value="true".

<outer_element>
     <leaf name="abc">
                  <attribute:a value="1"/>
                  <attribute:b value="2"/>
                  <attribute:c value="3"/>
                  <attribute:d value="true"/>
         </leaf>


     <leaf name="xyz">
      ....
     </leaf>
</outer_element>

Here is the case I have written,

if(string(node-name($node)) = "leaf" )
then
let $flag :=
     for $child in $node/node()
 
         if(name($child) eq "d" and $child/@value eq "true") 
         then 
           return "true"
         else
           return "false"
             
 if (contains ($flag,"true"))
 then 
   ()
 else
   element
   {
     node-name($node)
   }
   {
     $node/@*
     ,
     for $child in $node/node()
         return my:filterfun($child)
   }

  else
    element
        {
        node-name($node)
        }           {
         $node/@*
       ,
       for $child in $node/node()
          return my:filterfun($child )
      }

I am having trouble putting up it right,getting errors. Any help is appreciated. Thanks

mentor45
  • 17
  • 5

1 Answers1

0

It seems like

outer_element ! <outer_element>
{
   * except leaf[attribute:d/@value = 'true']
}
</outer_element>

should do.

Martin Honnen
  • 160,499
  • 6
  • 90
  • 110