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

この純粋なXPath2.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 に答える