2
<AppXmlLogWritter>
  <LogData>
    <LogID>235820130202134128634953894887814709273</LogID>
    <LogDateTime>20130102134128</LogDateTime>
    <LogType>Warning</LogType>
    <LogFlag>PACSFlag</LogFlag>
    <LogApplication>PACSLogApplication</LogApplication>
    <LogModule>PACSLogModule</LogModule>
    <LogLocation>PACSLogLocation</LogLocation>
    <LogText>PACSLogText</LogText>
  </LogData>
  <LogData>
    <LogID>2358201302021341286349538948878147093861</LogID>
    <LogDateTime>20130202134128</LogDateTime>
    <LogType>Error</LogType>
    <LogFlag>PACSFlag</LogFlag>
    <LogApplication>PACSLogApplication</LogApplication>
    <LogModule>PACSLogModule</LogModule>
    <LogLocation>PACSLogLocation</LogLocation>
    <LogText>PACSLogText</LogText>
  </LogData>
</AppXmlLogWritter>

XpathQuery

/AppXmlLogWritter/LogData[LogApplication/text()[starts-with(. , 'P')]and position()>='1' and position()<='3']

**Before Filter**
<Node 1> Position 1
<Node 2> Position 2
<Node 3> Position 3
<Node 4> Position 4
<Node 5> Position 5
<Node 6> Position 6   

 **After Filter**
<Node 2> Position 2
<Node 5> Position 5
<Node 6> Position 6

上記のノードのリストを参照してください。フィルターをかける前に6つのノードがありますが、フィルターをかけると3つのノードが取得されるため、そのposition()> = '1'およびposition()<= '3のクエリを記述しますが、結果は1つのノードのみになります。 sqlフィルターrownumberがすべての行に適用された後、rownumber条件がありますが、xmlではどのように達成できますか。LINQtoXMLを使用していません

4

1 に答える 1

1

括弧を使用します。

(/AppXmlLogWritter/LogData[LogApplication[starts-with(. , 'P')]])[position()<=3]

述語内に位置テストを配置すると、そのロケーションステップにのみ適用され、それぞれの親要素の1番目、2番目、または3番目の子である要素LogDataへの一致が制限されます。括弧を使用して、( Pで始まるすべての要素の)初期ノードセットを作成し、そのセットから最初の3つのノードをドキュメント順に選択します。LogDataLogDataLogDataLogApplication

于 2013-02-06T09:38:58.670 に答える