使用xquery进行查询处理

时间:2012-11-23 22:13:58

标签: xml xpath xquery

我对xquery完全陌生,我在从xml代码中获取正确的东西时遇到了问题。

以下是我正在处理的xml文件示例:

<root>
  <name id = "a">
    <first> Mary </first>
    <last> Britton </last>
    <company> ABC </company>
    <phone> 203-942-0485 </phone>
  </name>

  <paper pid = "b">
    <pname> Hello </pname>
    <author> a </author>
  </paper>

  <publish>
     <pbid> b </pbid>
     <location>
         <place> new york </place>
         <sales> 100 </sales>
     </location>
     <location>
         <place> los angeles </place>
         <sales> 200 </sales>
     </location>
  </publish>

我试图获得作者的公司和电话号码,以便那些在纽约发布至少50个销售的人。

现在,我只能获取位置信息,甚至不能获取发布信息。如何思考这个问题的任何提示或帮助?提前谢谢!

1 个答案:

答案 0 :(得分:1)

这个纯XPath 2.0表达式

/*/name[for $auid in @id,
                  $p in /*/paper[author eq $auid],
                  $pid in $p/@pid
               return
                  sum(/*/publish[pbid[1] eq $pid]
                              /location[place eq 'new york']
                                    /sales
                     )
                  ge 50
           ]
            /(company | phone)

根据以下XML文档进行评估(提供的文件被删除了无关的空白区域,以避免必须构建一个不必要的复杂XPath表达式,几乎到处都会使用normalize-space() ):

<root>
    <name id = "a">
        <first> Mary </first>
        <last> Britton </last>
        <company> ABC </company>
        <phone> 203-942-0485 </phone>
    </name>
    <paper pid = "b">
        <pname> Hello </pname>
        <author>a</author>
    </paper>
    <publish>
        <pbid>b</pbid>
        <location>
            <place>new york</place>
            <sales> 100 </sales>
        </location>
        <location>
            <place> los angeles </place>
            <sales> 200 </sales>
        </location>
    </publish>
</root>

生成想要的正确结果

<company> ABC </company>
<phone> 203-942-0485 </phone>