2016-01-08 31 views
0

我用Nokogiri解析一個XML文檔並搜索一個特定的部分並將它分配給一個變量。然後,我搜索該節點,結果似乎來自整個文檔,而不是該小節。XPath結果似乎暗中有更多的數據

實施例:

data = Nokogiri::XML(File.open("something.xml")) 
section = data.xpath("//w:tr[.//w:t[contains(., '#something#')]]"). 
section.xpath("//wp:docPr") 

但是,不屬於即使在puts section輸出上部分返回結果中的XPath。

<w:tr w:rsidR="00B76A6E"> 
     <w:tc> 
      <w:tcPr> 
      <w:tcW w:w="9035" w:type="dxa"/> 
      <w:tcBorders> 
       <w:top w:val="single" w:sz="6" w:space="0" w:color="0A57A4"/> 
      </w:tcBorders> 
      <w:vAlign w:val="center"/> 
      </w:tcPr> 
      <w:p w:rsidR="00B76A6E" w:rsidRDefault="00D85F67"> 
      <w:pPr> 
       <w:jc w:val="left"/> 
      </w:pPr> 
      <w:r> 
       <w:t>#something#</w:t> 
      </w:r> 
      </w:p> 
     </w:tc> 
     <w:tc> 
      <w:tcPr> 
      <w:tcW w:w="1705" w:type="dxa"/> 
      <w:tcBorders> 
       <w:top w:val="single" w:sz="6" w:space="0" w:color="0A57A4"/> 
      </w:tcBorders> 
      <w:vAlign w:val="center"/> 
      </w:tcPr> 
      <w:p w:rsidR="00B76A6E" w:rsidRDefault="00D85F67"> 
      <w:r> 
       <w:rPr> 
       <w:noProof/> 
       </w:rPr> 
       <w:drawing> 
       <wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="79A6C53C" wp14:editId="0DE97A9F"> 
        <wp:extent cx="292608" cy="292608"/> 
        <wp:effectExtent l="0" t="0" r="0" b="0"/> 
        <wp:docPr id="924" name="Picture 924"/> 
        <wp:cNvGraphicFramePr> 
        <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/> 
        </wp:cNvGraphicFramePr> 
        <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"> 
        <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"> 
         <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"> 
         <pic:nvPicPr> 
          <pic:cNvPr id="0" name="S-sm.png"/> 
          <pic:cNvPicPr/> 
         </pic:nvPicPr> 
         <pic:blipFill> 
          <a:blip r:embed="rId20" cstate="print"> 
          <a:extLst> 
           <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}"> 
           <a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0"/> 
           </a:ext> 
          </a:extLst> 
          </a:blip> 
          <a:stretch> 
          <a:fillRect/> 
          </a:stretch> 
         </pic:blipFill> 
         <pic:spPr> 
          <a:xfrm> 
          <a:off x="0" y="0"/> 
          <a:ext cx="292608" cy="292608"/> 
          </a:xfrm> 
          <a:prstGeom prst="rect"> 
          <a:avLst/> 
          </a:prstGeom> 
         </pic:spPr> 
         </pic:pic> 
        </a:graphicData> 
        </a:graphic> 
       </wp:inline> 
       </w:drawing> 
      </w:r> 
      </w:p> 
     </w:tc> 
     </w:tr> 

這很混亂。我試圖得到id<wp:DocPr>標籤的價值,但它返回一個像這樣的很多人:

section.xpath("//wp:docPro") 
<wp:docPr id="225" name="Picture 225"/> 
<wp:docPr id="226" name="Picture 226"/> 
<wp:docPr id="227" name="Picture 227"/> 
<wp:docPr id="228" name="Picture 228"/> 
<wp:docPr id="924" name="Picture 924"/> 
<wp:docPr id="926" name="Picture 926"/> 
<wp:docPr id="925" name="Picture 925"/> 
<wp:docPr id="927" name="Picture 927"/> 
<wp:docPr id="229" name="Picture 229"/> 
<wp:docPr id="230" name="Picture 230"/> 
<wp:docPr id="346" name="Picture 6"/> 
<wp:docPr id="17" name="Picture 6"/> 
<wp:docPr id="3" name="Picture 6"/> 
<wp:docPr id="7" name="Picture 6"/> 
<wp:docPr id="255" name="Picture 6"/> 
<wp:docPr id="304" name="Picture 6"/> 
<wp:docPr id="313" name="Picture 6"/> 
+0

請提供XML的MINIMAL示例。這意味着證明問題的最低必要條件。除此之外的任何事情都會浪費我們的時間,試圖幫助你。另外,你的XML無效。請確保它是正確的,因爲在分析和嘗試回答時可能會導致問題。 –

+0

在XML中不可能有「祕密數據」 - 它是開放的,可查看的,它立即告訴你XPath本身存在問題。 –

+0

任何額外的數據關係的xpath或節點也可能是由於一些額外的jQuery在那裏 –

回答

1

加一個點.在你的XPath的開始,使之相對於當前上下文元素:

section.xpath(".//wp:docPr") 

您已經在第一個XPath謂詞的內部使用了相同的概念(這個是明確的:.//w:t[contains(., '#something#')]),但是在第二個XPath中忘記了它。