2011-07-01 227 views
2

我試圖解析OpenOffice電子表格以獲取第一列中具有唯一值的行。選擇具有唯一值的元素

I.E.,我想從下面的XML片段中檢索第一個子<table:table-cell>中具有唯一<text:p>值的所有<table:table-row>元素。

<table:table table:name="foo"> 
     <table:table-row> 
      <table:table-cell> 
       <text:p>1</text:p> 
      </table:table-cell> 
      <table:table-cell> 
       <text:p>foo</text:p> 
      </table:table-cell> 
     </table:table-row> 
     <table:table-row> 
      <table:table-cell> 
       <text:p>2</text:p> 
      </table:table-cell> 
      <table:table-cell> 
       <text:p>bar</text:p> 
      </table:table-cell> 
     </table:table-row> 
     <table:table-row> 
      <table:table-cell> 
       <text:p>1</text:p> 
      </table:table-cell> 
      <table:table-cell> 
       <text:p>baz</text:p> 
      </table:table-cell> 
     </table:table-row> 
    </table:table> 

我喜歡讓下面的輸出節點

 <table:table-row> 
      <table:table-cell> 
       <text:p>1</text:p> 
      </table:table-cell> 
      <table:table-cell> 
       <text:p>foo</text:p> 
      </table:table-cell> 
     </table:table-row> 
     <table:table-row> 
      <table:table-cell> 
       <text:p>2</text:p> 
      </table:table-cell> 
      <table:table-cell> 
       <text:p>bar</text:p> 
      </table:table-cell> 
     </table:table-row> 

我怎樣才能做到這一點使用XPath?

+0

的XPath僅僅是一個得到一個定義的元素系列表達|屬性|您的DOM節點。你想要的是將你的初始XML文件轉換爲另一個。您可以通過使用XSLT,然後使用XSLT使用XPath表達式來實現。 – Spredzy

+1

我想要得到節點,我不會想到我也能得到XML。謝謝。 – Aru

回答

0

這個XPath產生所需的輸出: /table:table/table:table-row[not(./table:table-cell[1]/text:p/text() = preceding-sibling::table:table-row/table:table-cell[1]/text:p/text())]

0

純XPath的應該是:

/table:table/table:*[not(
    .//text:p[1] 
    = preceding-sibling::table:table-row//text:p[1] 
)] 

如果預計輸出你的意思table:row節點序列,而不是在XML文檔中有人評論正確通知。

/table:table/table:*[not(
    ./table:*[1]//text:*[1] 
    = preceding-sibling::table:*/table:*[1]/text:*[1] 
)] 
+0

我不明白你的XPath表達式,但是這爲我產生了一個額外的空節點。儘管如此,感謝代碼和澄清。 – Aru

+0

@polishchuk回答更安全,因爲絕對XPath可能有點慷慨。我已經給了你一個簡短的(完全處理你的問題輸入),它必須根據你對輸入xml(和XPath :)的知識進行調整)。爲了正確,我用一個更安全的XPath編輯了這個問題,它應該不那麼一般,但更安全。 –

相關問題