2012-06-05 27 views
3
<row transactionDateTime="2012-06-04 02:42:44" transactionID="2519826732" quantity="5000" typeName="Caldari Navy Mjolnir Rocket" typeID="27321" price="988.72" clientID="92026367" clientName="N Clover" stationID="60003760" stationName="Jita IV - Moon 4 - Caldari Navy Assembly Plant" transactionType="buy" transactionFor="personal" journalTransactionID="5956192510"/> 

你好,Xpath的子串之前得到只有一個元素

以上就是我想從提取數據的XML文件的樣本。我想要提取的數據是;

transactionDateTime="2012-06-04" 

現在 - 我沒有問題得到這與以下Xpath查詢;

substring-before(//row[@transactionfor='personal']/attribute::transactiondatetime, ' ') 

這正是我想要的 - 「2012-06-04」,但它只是讓我一個元素!如果我刪除子字符串 - 在它將給我所有元素之前,但包括時間。

任何幫助將是偉大的!

回答

1

它不起作用,因爲substring-before()的第一個參數是一個字符串,並且您將它傳遞給所有行的transactionDateTime屬性。

嘗試此代替:

//row[@transactionFor='personal']/substring-before(@transactionDateTime,' ') 
+0

試圖複製/粘貼,但我得到了一個錯誤,XPath查詢無法完成。 。請檢查語法並重試。我也試過了;//行/ substring-before([@ transactionfor ='personal']/attribute :: transactiondatetime,'') – Archetype

+0

@ user1438413 - 它適用於我在oXygen。你在用什麼處理器?試試這個:'// row/@ transactionDateTime/substring-before(。,'')' –

+0

我在學校的電腦上,但我在谷歌電子表格中使用它,所以這應該是不相關的。它仍然無法處理更改 - 同樣的錯誤。 – Archetype

2
substring-before(//row[@transactionfor='personal']/attribute::transactiondatetime, ' ') 

在XPath 1.0如果一個節點集作爲參數,其中單個值(字符串)有望通過,用於在節點集的第一個節點作爲論據。規則是將功能string()應用於通過的節點集,並且通過定義string($nodeset)string($node-set[1])相同。

在XPath 2.0中,上述表達式應該會導致錯誤。

當單個XPath表達式產生應用於所有選定節點的函數的結果時,如果節點數大於1,則這是不可能的。

因此,每個選定的節點必須在第二步中處理(可能在託管XPath的編程語言中指定的循環中)。

在XPath 2.0中,可以使用函數調用作爲表達式的最後一個位置步驟。

因此有可能產生的序列中所有想串與這個XPath 2.0表達式:

//row[@transactionfor='personal'] 
      /attribute::transactiondatetime 
          /substring-before(., ' ') 
+0

嗨Dimitre, 我真的開始認爲這是與谷歌電子表格的問題。我用你給的表情,但有以下錯誤想出了: 錯誤:給定的,不能評價xPath查詢。請檢查查詢語法://行[@ transactionfor =「個人」] /屬性:: transactiondatetime /串 - 前(」「) 正如你可以看到它基本上是一個複製/粘貼,但它仍然沒有工作。我可以看到您的巨大聲譽和非常可靠的問題描述,所以我的假設是您擁有正確的語法,但Google Spreadsheets存在一些問題。 – Archetype

+0

另外,頂部表達式; 子-之前(//行[@ transactionfor = '個人'] /屬性:: transactiondatetime,'「) 沒有給出一個錯誤,但是返回的一個值。我相信你說它會導致一個錯誤,因爲我告訴它「在節點數大於1時產生應用於所有選定節點的函數的結果」。 但是,它並沒有給出一個錯誤。它只是返回一個值,其餘的不做任何事情。 – Archetype

+0

另外,我很抱歉在我的帖子中缺少格式。我不知道爲什麼,但我不能爲了我的生活得到休息時間。 – Archetype

相關問題