C# XPath表达式,用于在定义的前一个和后一个节点序列之间选择节点

C# XPath表达式,用于在定义的前一个和后一个节点序列之间选择节点,c#,.net,xml,xpath,linq-to-xml,C#,.net,Xml,Xpath,Linq To Xml,我得到了以下结构化XML文件: <w:document> <w:body> <w:p> <w:r> <w:t/> </w:r> </w:p> <w:p> <w:r> <w:t/>

我得到了以下结构化XML文件:

   <w:document>
      <w:body>
        <w:p>
           <w:r>
              <w:t/>
           </w:r>
        </w:p>
        <w:p>
           <w:r>
              <w:t/>
           </w:r>
        </w:p>
        <w:p>
           <w:r>
              <w:instrText/>
           </w:r>
        </w:p>
        <w:p>
           <w:r>
              <w:t/>
           </w:r>
        </w:p>
        <w:p>
           <w:r>
              <w:instrText/>
           </w:r>
        </w:p>
        <w:p>
           <w:r>
              <w:t/>
           </w:r>
        </w:p>
     </w:body>
  </w:document>

我正在拼命寻找一个XPath表达式来选择两个
节点之间的所有
节点<代码>节点基本上在XML文档中自由出现,但我只对两个
节点之间的节点感兴趣


非常感谢您的帮助。

它不是像:
/x/t
那么简单吗?

它不是像:
/x/t
那么简单吗

我拼命想找到一个 选择所有
两个节点之间的节点
节点

节点集求交表达式

我拼命想找到一个 选择所有
两个节点之间的节点
节点


节点集交点表达式

示例文档无效。
t
x
元素没有结束标记。或者所有这些都应该是这样的自包含标记:
?请更正,以便我们能够给出有意义的答案。好的,对不起,让我编辑我的问题并提供真实的结构。由于这是OpenXml,您不应该查看
元素吗?我想您想提取字段文本?这在XPath中是相当复杂的,因为字段不仅可以在多个运行/段落/等中拆分,还可以嵌套(典型的示例是TOC字段中的超链接字段)。@0xA3您是对的,这是开放XML,我正在尝试提取两个自定义定义字段之间的文本。因为我这里的问题基本上是关于XPath的,因为这是我第一次想到的最好的方法,所以我会给最好的答案打分,但你已经解决了我真正的问题。所以谢谢;-)。您的示例文档无效。
t
x
元素没有结束标记。或者所有这些都应该是这样的自包含标记:
?请更正,以便我们能够给出有意义的答案。好的,对不起,让我编辑我的问题并提供真实的结构。由于这是OpenXml,您不应该查看
元素吗?我想您想提取字段文本?这在XPath中是相当复杂的,因为字段不仅可以在多个运行/段落/等中拆分,还可以嵌套(典型的示例是TOC字段中的超链接字段)。@0xA3您是对的,这是开放XML,我正在尝试提取两个自定义定义字段之间的文本。因为我这里的问题基本上是关于XPath的,因为这是我第一次想到的最好的方法,所以我会给最好的答案打分,但你已经解决了我真正的问题。所以谢谢;-)@亚历杭德罗:你能链接到节点集交叉测试的解释吗?我总是被计数(.)风格测试弄糊涂。@geoffc:不幸的是,我找不到Micheal Kay博士的书的预览版。这被称为Kaysan节点集交点表达式,因为他是第一个指出的。它是如何工作的?主要原因是,
|
联合运算符会产生不重复的节点集。因此,在一个节点与已经包含该节点的节点集之间执行并集不会改变计数(这意味着它包含在集合论中)@Alejandro:你能链接到节点集交集测试的解释吗?我总是被计数(.)风格测试弄糊涂。@geoffc:不幸的是,我找不到Micheal Kay博士的书的预览版。这被称为Kaysan节点集交点表达式,因为他是第一个指出的。它是如何工作的?主要原因是,
|
联合运算符会产生不重复的节点集。因此,在节点与已经包含该节点的节点集之间执行并集不会改变计数(意味着它包含在集合论中)
/w:document/w:body/w:p/w:r/w:instrText/following::w:t
      [count(.|/w:document/w:body/w:p/w:r/w:instrText/preceding::w:t) =
       count(/w:document/w:body/w:p/w:r/w:instrText/preceding::w:t)]