1

我对 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 次销售的人获取作者的公司和电话号码。

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

4

1 回答 1

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 文档进行评估时(提供的文档消除了多余的空白,以避免必须构造一个normalize-space()几乎在任何地方都可以使用的不必要的复杂 XPath 表达式):

<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>
于 2012-11-23T22:38:18.380 回答