<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个节点但是当我过滤我有三个节点 所以我写了那个位置的查询()&gt; =&#39; 1&#39;和position()&lt; =&#39; 3但结果只得到1个节点 在sql中,在过滤器rownumber应用于所有行之后存在rownumber条件,但是在xml中我如何实现。我没有使用LINQ to XML
答案 0 :(得分:1)
使用括号:
(/AppXmlLogWritter/LogData[LogApplication[starts-with(. , 'P')]])[position()<=3]
如果您将位置测试放在LogData
谓词中,那么它仅适用于该位置步骤,并将匹配限制为第一个,第二个或第三个LogData
元素LogData
他们各自父元素的子元素。使用括号,您正在构建一个初始节点集(在LogData
以P开头的所有LogApplication
元素中),然后从文档中选择前三个节点 顺序。