在OOXML中选择两个文本标记之间的所有节点



我有一个很大的XML文件(来自Microsoft Word),其中包含表格、段落等。我试图获取两个元素之间的所有XML。例如,我想获取这两个

之间的所有XML
<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抓取#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#')]]")

但是我需要弄清楚我怎么能说document[start..]

此XPath

//node()[    preceding::w:p[w:r/w:t[.='#StartHere#']] 
         and following::w:p[w:r/w:t[.=': #StopHere#']]]

将选择包含标记文本的两个段落之间的所有节点。

In Nokogiri: doc.xpath(" 在XPath上面插入 ")

相关内容

  • 没有找到相关文章

最新更新