使用xquery删除XML中不重复的元素

时间:2011-03-30 00:02:44

标签: xml xquery

我有这个XML文件

<?xml version="1.0"?>
<ns0:personas xmlns:ns0="http://www.personas.com">
    <ns0:persona>
        <ns0:idee>idee_1</ns0:idee>
        <ns0:nss>nss_1</ns0:nss>
        <ns0:curp>curp_1</ns0:curp>
        <ns0:rfc>rfc_1</ns0:rfc>
        <ns0:nombre>nombre_1</ns0:nombre>
        <ns0:apellido-paterno>apellido-paterno_1</ns0:apellido-paterno>
        <ns0:apellido-materno>apellido-materno_1</ns0:apellido-materno>
        <ns0:agregado-medico>agregado-medico_1</ns0:agregado-medico>
        <ns0:agregado-afiliacion>agregado-afiliacion_1</ns0:agregado-afiliacion>
    </ns0:persona>
    <ns0:persona>
        <ns0:idee>idee_1</ns0:idee>
        <ns0:nss>nss_1</ns0:nss>
        <ns0:curp>curp_1</ns0:curp>
        <ns0:rfc>rfc_1</ns0:rfc>
        <ns0:nombre>nombre_1</ns0:nombre>
        <ns0:apellido-paterno>apellido-paterno_1</ns0:apellido-paterno>
        <ns0:apellido-materno>apellido-materno_1</ns0:apellido-materno>
        <ns0:agregado-medico>agregado-medico_1</ns0:agregado-medico>
        <ns0:agregado-afiliacion>agregado-afiliacion_1</ns0:agregado-afiliacion>
    </ns0:persona>
    <ns0:persona>
        <ns0:idee>idee_1</ns0:idee>
        <ns0:nss>nss_1</ns0:nss>
        <ns0:curp>curp_1</ns0:curp>
        <ns0:rfc>rfc_1</ns0:rfc>
        <ns0:nombre>ramon</ns0:nombre>
        <ns0:apellido-paterno>apellido-paterno_1</ns0:apellido-paterno>
        <ns0:apellido-materno>apellido-materno_1</ns0:apellido-materno>
        <ns0:agregado-medico>agregado-medico_1</ns0:agregado-medico>
        <ns0:agregado-afiliacion>agregado-afiliacion_1</ns0:agregado-afiliacion>
    </ns0:persona>
</ns0:personas>

我想删除所有不重复的元素。例如,上述xml示例的结果应该是:

<?xml version="1.0"?>
    <ns0:personas xmlns:ns0="http://www.personas.com">
        <ns0:persona>
            <ns0:idee>idee_1</ns0:idee>
            <ns0:nss>nss_1</ns0:nss>
            <ns0:curp>curp_1</ns0:curp>
            <ns0:rfc>rfc_1</ns0:rfc>
            <ns0:nombre>nombre_1</ns0:nombre>
            <ns0:apellido-paterno>apellido-paterno_1</ns0:apellido-paterno>
            <ns0:apellido-materno>apellido-materno_1</ns0:apellido-materno>
            <ns0:agregado-medico>agregado-medico_1</ns0:agregado-medico>
            <ns0:agregado-afiliacion>agregado-afiliacion_1</ns0:agregado-afiliacion>
        </ns0:persona>
        <ns0:persona>
            <ns0:idee>idee_1</ns0:idee>
            <ns0:nss>nss_1</ns0:nss>
            <ns0:curp>curp_1</ns0:curp>
            <ns0:rfc>rfc_1</ns0:rfc>
            <ns0:nombre>nombre_1</ns0:nombre>
            <ns0:apellido-paterno>apellido-paterno_1</ns0:apellido-paterno>
            <ns0:apellido-materno>apellido-materno_1</ns0:apellido-materno>
            <ns0:agregado-medico>agregado-medico_1</ns0:agregado-medico>
            <ns0:agregado-afiliacion>agregado-afiliacion_1</ns0:agregado-afiliacion>
        </ns0:persona>
    </ns0:personas>

我有这些功能:

此上面还有更多代码

fn:remove($persona,  xf:index-of-node($no-duplicado, $persona))


declare function xf:index-of-node ( $arg as element()? , $substring as element()* )  as xs:integer* {

      if (contains($arg, $substring))
      then (string-length(substring-before($arg, $substring))+1,
            for $other in
               xf:index-of-node(substring-after($arg, $substring),
                                   $substring)
            return
              $other + string-length(substring-before($arg, $substring)) + string-length($substring))
      else ()
 } ;

1 个答案:

答案 0 :(得分:0)

对不起,我没有收到通知。这是许多XQuery表达式之一:

<ns0:personas xmlns:ns0="http://www.personas.com">
{/*/*[some $other in (/*/* except .) satisfies deep-equal(.,$other)]}
</ns0:personas>