XPath在OOXML中选择两个文本标记之间的所有节点?
问题描述:
我有一个包含表格,段落等的大XML文件(来自Microsoft Word)。我试图抓住两个元素之间的所有XML。例如,我想抓住所有的这两个XPath在OOXML中选择两个文本标记之间的所有节点?
<w:p w:rsidR="00C82C88" w:rsidRDefault="00265695">
<w:r>
<w:t>#StartHere#</w:t>
</w:r>
</w:p>
a whole bunch of XML
<w:p w:rsidR="00C82C88" w:rsidRDefault="00265695" w:rsidP="00265695">
<w:pPr>
<w:pStyle w:val="Caption"/>
</w:pPr>
<w:r>
<w:t xml:space="preserve">Figure </w:t>
</w:r>
<w:r w:rsidR="00F044F8">
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r w:rsidR="00F044F8">
<w:instrText xml:space="preserve"> SEQ Figure \* ARABIC </w:instrText>
</w:r>
<w:r w:rsidR="00F044F8">
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r>
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t>1</w:t>
</w:r>
<w:r w:rsidR="00F044F8">
<w:rPr>
<w:noProof/>
</w:rPr>
<w:fldChar w:fldCharType="end"/>
</w:r>
<w:r>
<w:t>: #StopHere#</w:t>
</w:r>
</w:p>
我怎么能引入nokogiri之间的XML的抓住我所有#StartHere#和#StopHere#,包括这些元素之间的XML的,这个文本被包裹在?我想以某种方式打电话给extracted_data = document[from..stop]
。
我可以通过寻找在文档中查找这些点:
start = doc.at_xpath("//w:p[.//w:t[contains(., '#StartHere#')]]")
stop = doc.at_xpath("//w:p[.//w:t[contains(., '#StopHere#')]]")
但需要弄清楚怎么说呢文件[start..stop]抓住一切(包括)和它之间。
答
此XPath,
//node()[ preceding::w:p[w:r/w:t[.='#StartHere#']]
and following::w:p[w:r/w:t[.=': #StopHere#']]]
将选择包含您的标记文本两款之间的所有节点。
在引入nokogiri:doc.xpath("
插入件之上的XPath这里")
非常感谢您!正在寻找这个。 – LewlSauce
嗯,我如何将其包含在我的代码中?它会沿着doc.xpath(// node()[前面的:: w:p [w:r/w:t [。='#StartHere#']]和以下的行:w:p [ w:r/w:t [。=':#StopHere#']]])? – LewlSauce
答案更新以显示Nokogiri XPath invokation。 (环绕双引号('“”')。) – kjhughes