Marklogic: Xpath using a handle to a processing instruction

How to remove a processing instruction tag in xml using XQuery?

XML example:

<a>
    <text><?test id="1" loc="start"?><b type="bold">1. </b>
    Security or protection <?test id="1" loc=="end"?><?test id="1" loc="start"?><b type="bold">2.
    </b> Analyse.
    <?test id="1" loc="end"?></text>
  </a>

      

Expected Result:

 <a>
     <text><b type="bold">1. </b> Security or protection <b type="bold">2.
     </b> Analyse.</text>

  </a>

      

Please help remove PI tags.

+3


source to share


1 answer


Something like this should work:

xquery version "1.0-ml";

declare function local:suppress-pi($nodes) {
  for $node in $nodes
  return
    typeswitch ($node)
    case element() return
      element { fn:node-name($node) } {
        $node/@*,
        local:suppress-pi($node/node())
      }
    case processing-instruction() return ()
    default return $node
};

local:suppress-pi(<a>
    <text><?test id="1" loc="start"?><b type="bold">1. </b>
    Security or protection <?test id="1" loc=="end"?><?test id="1" loc="start"?><b type="bold">2.
    </b> Analyse.
    <?test id="1" loc="end"?></text>
  </a>)

      



NTN!

+4


source







All Articles