2010-10-01 1 views
0

я получил следующий структурированный XML-файл:выражения XPath для выбора узлов между определенной последовательностью предшествующим и последующим узлов

<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 выражения, чтобы выбрать все <w:t> Узлы, которые находятся между двумя узлами <w:instrText>. <w:t> узлы в основном появляются свободно вокруг XML-документа, но меня интересуют только те, которые находятся между двумя узлами <w:instrText>.

Любая помощь очень ценится.

+0

Вы образец документа недействительно. Для элементов 't' и' x' нет закрывающих тегов. Или все это должны быть самодостаточные теги: ''? Пожалуйста, исправьте, чтобы мы могли дать содержательные ответы. –

+0

Хорошо, извините, позвольте мне изменить свой вопрос и предоставить реальную структуру. – naacal

+1

Как это OpenXml, разве вы не должны смотреть на '', '' и ' 'elements? Предполагаю, вы хотите извлечь текст в поле? Это довольно сложно сделать в XPath, потому что поля могут быть не только разделены на несколько прогонов/абзацев/etc, но также могут быть вложенными (канонический пример будет полями гиперссылок внутри поля TOC). –

ответ

2

Я отчаянно пытаюсь найти свое выражение в XPath, чтобы выбрать все <w:t> узлов, которые находятся между двумя <w:instrText> узлами

/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)] 

выражения пересечения множества узлов

+0

Спасибо, что работает красиво :-). – naacal

+0

@naacal: Вы хорошо. – 2010-10-01 16:22:26

+0

@Alejandro: Не могли бы вы ссылаться на объяснение теста пересечения набора узлов? Меня всегда путают тесты стиля count (.). – geoffc

1

Разве это не так просто: //x/t?

Смежные вопросы