Xml 在Xquery中按属性比较元素

Xml 在Xquery中按属性比较元素,xml,database,xquery,Xml,Database,Xquery,到目前为止,我有一个名为resume的XML文档,其中包含以下方式的技能元素: <skills> <skill what = "C" level="0"></skill> <skill what = "Java" level="1"></skill> <skill what = "SQL" level="2"></skill> <ski

到目前为止,我有一个名为resume的XML文档,其中包含以下方式的技能元素:

    <skills>
        <skill what = "C" level="0"></skill>
        <skill what = "Java" level="1"></skill>
        <skill what = "SQL" level="2"></skill>
        <skill what = "Lisp" level="3"></skill>
    </skills>
我需要帮助将$r1和$r2的@what和@level进行比较。我试过了

data($r1/@what) = data($r1/skills/skill/@what) along with data($r1/skills/skill/@level) = data($r2/@level)
但我似乎无法获得所需的输出。有没有办法进行这种比较?非常感谢


注意:我正在使用XML1.0,通过重新定义您的问题来找到他们中只有一个具备的技能,这个问题变得相当容易解决

let $skills1 :=    <skills>
        <skill what = "C" level="0"></skill>
        <skill what = "Java" level="1"></skill>
        <skill what = "SQL" level="2"></skill>
        <skill what = "Lisp" level="3"></skill>
        <skill what = "XQuery" level="4"></skill>
    </skills>
let $skills2 :=    <skills>
        <skill what = "C" level="0"></skill>
        <skill what = "Java" level="1"></skill>
        <skill what = "SQL" level="2"></skill>
        <skill what = "Lisp" level="3"></skill>
    </skills>

return
  for $skill in ($skills1, $skills2)/skill
  where not(
    $skills1/skill[deep-equal(., $skill)] and
    $skills2/skill[deep-equal(., $skill)]
  )
  return $skill
let$skills1:=
让$skills2:=
返回
对于$skill in($skills1,$skills2)/skill
哪里没有(
$skills1/技能[深度相等(,$skill)]和
$skills2/技能[深度相等(,$skill)]
)
返回$skill
这将返回仅在技能集1中的技能(4级XQuery)。如果将整个flwor表达式包装在
return
子句中的
empty(…)
调用中,则匹配的技能集将获得
true
,如果它们有(任何)不常见的成员,则获得
false

let $skills1 :=    <skills>
        <skill what = "C" level="0"></skill>
        <skill what = "Java" level="1"></skill>
        <skill what = "SQL" level="2"></skill>
        <skill what = "Lisp" level="3"></skill>
        <skill what = "XQuery" level="4"></skill>
    </skills>
let $skills2 :=    <skills>
        <skill what = "C" level="0"></skill>
        <skill what = "Java" level="1"></skill>
        <skill what = "SQL" level="2"></skill>
        <skill what = "Lisp" level="3"></skill>
    </skills>

return
  for $skill in ($skills1, $skills2)/skill
  where not(
    $skills1/skill[deep-equal(., $skill)] and
    $skills2/skill[deep-equal(., $skill)]
  )
  return $skill