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

时间:2016-11-03 20:03:09

标签: ruby xml xpath nokogiri openxml

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

之间的所有XML
$(document).ready(function(){
    var x1;
    x1 = +localStorage.getItem("x1");
    $("#r1").html("Your rating: " + x1);

    $("#rating1 span").click(function() {
        var x1 = 5 - $(this).index();
        $("#r1").html("Your rating: " + x1);
        localStorage.setItem("x1", x1);
    });
});

我怎样才能让Nokogiri抓住#StartHere#和#StopHere#之间的所有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>

我可以通过查找文件找到这些要点:

extracted_data = document[from..stop]

但是需要弄清楚我怎么能说文件[start..stop]来抓住所有东西(包括那些)以及它之间。

1 个答案:

答案 0 :(得分:2)

此XPath

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

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

在Nokogiri doc.xpath(" 在此处插入XPath ")