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#']]] 

将选择包含您的标记文本两款之间的所有节点。

在引入nokogiridoc.xpath("插入件之上的XPath这里")

+0

非常感谢您!正在寻找这个。 – LewlSauce

+0

嗯,我如何将其包含在我的代码中?它会沿着doc.xpath(// node()[前面的:: w:p [w:r/w:t [。='#StartHere#']]和以下的行:w:p [ w:r/w:t [。=':#StopHere#']]])? – LewlSauce

+0

答案更新以显示Nokogiri XPath invokation。 (环绕双引号('“”')。) – kjhughes