首页 > 解决方案 > 如何在不重写整个查询的情况下重写此 xquery 以删除子节点?

问题描述

这是适用于此 xml 文件的 xquery。

<results>
  {
    for $depen in doc("../company/dependent.xml")//dependent
    where $depen/dependent_name=*
    return
     <row>
     <dependent name="{$depen/dependent_name}"/>
      {
        for $emp in doc("../company/employee.xml")//employee[ssn = $depen/essn ]
        return

        <employee>

        <emp fname="{$emp/fname}" lname="{$emp/lname}"/>
              {
              for $man in doc("../company/employee.xml")//employee[ssn = $emp/superssn ]
              return
              <manager>

              <mgr fname="{$man/fname}" lname="{$man/lname}"/>             

              </manager>
             }              
        </employee> 
      } 
     </row>   
  }
</results>

它产生下面的输出。

<results>
  <row>
    <dependent name="Alice"/>
    <employee>
      <emp fname="John" lname="Smith"/>
      <manager>
        <mgr fname="Franklin" lname="Wong"/>
      </manager>
    </employee>
  </row>
  <row>
    <dependent name="Elizabeth"/>
    <employee>
      <emp fname="John" lname="Smith"/>
      <manager>
        <mgr fname="Franklin" lname="Wong"/>
      </manager>
    </employee>
  </row>
  <row>
    <dependent name="Michael"/>
    <employee>
      <emp fname="John" lname="Smith"/>
      <manager>
        <mgr fname="Franklin" lname="Wong"/>
      </manager>
    </employee>
  </row>
  <row>
    <dependent name="Alice"/>
    <employee>
      <emp fname="Franklin" lname="Wong"/>
      <manager>
        <mgr fname="James" lname="Borg"/>
      </manager>
    </employee>
  </row>
  <row>
    <dependent name="Joy"/>
    <employee>
      <emp fname="Franklin" lname="Wong"/>
      <manager>
        <mgr fname="James" lname="Borg"/>
      </manager>
    </employee>
  </row>
  <row>
    <dependent name="Theodore"/>
    <employee>
      <emp fname="Franklin" lname="Wong"/>
      <manager>
        <mgr fname="James" lname="Borg"/>
      </manager>
    </employee>
  </row>
  <row>
    <dependent name="Abner"/>
    <employee>
      <emp fname="Jennifer" lname="Wallace"/>
      <manager>
        <mgr fname="James" lname="Borg"/>
      </manager>
    </employee>
  </row>
</results>

如何删除最终结果中的员工和经理标签,使其看起来更像下面这样。

   <results>
      <row>
        <dependent name="Alice"/>
        <emp fname="John" lname="Smith"/>
        <mgr fname="Franklin" lname="Wong"/>
      </row>
      <row>
        <dependent name="Elizabeth"/>
        <emp fname="John" lname="Smith"/>
        <mgr fname="Franklin" lname="Wong"/>
      </row>
      <row>
        <dependent name="Michael"/>
        <emp fname="John" lname="Smith"/>
        <mgr fname="Franklin" lname="Wong"/>
      </row>
      <row>
        <dependent name="Alice"/>
        <emp fname="Franklin" lname="Wong"/>
        <mgr fname="Franklin" lname="Wong"/>
      </row>
      <row>

... 等等等等。

我只需要知道如何重写最终的 xquery 以消除最终结果中对员工和经理节点的需求,但仍保留该值。

标签: xmlxquery

解决方案


推荐阅读