select OOXML 中两个文本标记之间的所有节点的 XPath?
XPath to select all nodes between two text markers in 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..stop] 来抓取所有内容(包括那些)。
这个 XPath,
//node()[ preceding::w:p[w:r/w:t[.='#StartHere#']]
and following::w:p[w:r/w:t[.=': #StopHere#']]]
将 select 包含您的标记文本的两个段落之间的所有节点。
在 Nokogiri 中:doc.xpath("
在此处的 XPath 上方插入")
我有一个很大的 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..stop] 来抓取所有内容(包括那些)。
这个 XPath,
//node()[ preceding::w:p[w:r/w:t[.='#StartHere#']]
and following::w:p[w:r/w:t[.=': #StopHere#']]]
将 select 包含您的标记文本的两个段落之间的所有节点。
在 Nokogiri 中:doc.xpath("
在此处的 XPath 上方插入")