2013-01-17 13 views
-3

我試圖在一個XQuery語句中一起使用substringconcat函數。xquery子串然後concat

以下是我有:

fn:concat(fn:substring({data($x/DueDate)},1,4),fn:substring({data($x/DueDate)},6,2),fn:substring({data($x/(DueDate))},9,2)) 

在我的XML的交貨期值是:2013-06-27

我期待上述函數返回:20130704

相反,這是我得到:

fn:concat(fn:substring(2013-06-27,1,4),fn:substring(2013-06-27,6,2),fn:substring(2013-06-27,9,2)) 

我很困惑,爲什麼!

+1

請看看格式化你的代碼。還請添加一個工作示例(可以在代碼中處理錯誤),這將包括一些'$ let $ x:= ...'或類似的東西!看看[問]。 –

+0

目前還不清楚問題是什麼,因爲您沒有提供代碼片段的上下文。請舉一個更完整的例子。 – wst

回答

0

您確定您的DueDate價值實際上是2013-06-27?以下是對各子單獨的呼叫等於:

substring('2013-06-27',1,4) 

=>2013

fn:substring('2013-06-27',6,2) 

=>06

fn:substring('2013-06-27',9,2) 

=>27

substring()在1-啓動索引字符數在th中傳遞e第二個參數並複製第三個參數中傳遞的字符數。

+0

對不起...我的Duedate是2013-07-04。當我在XSLT中使用這個函數時,我得到了正確的值......但是當我使用Xquery時,它給了我一個聲明而不是一個值...... – ridermule

+0

請在您的問題中提供完整的XQuery代碼。問題似乎是你的表達沒有被評估,但是沒有看到表達的上下文,我們只能猜測你做錯了什麼。 – wst

0

清理你格式化和包圍曝光(去除不必要的大括號,刪除一些括號),你會得到一些有效的代碼:

fn:concat(
    fn:substring(data($x/DueDate), 1, 4), 
    fn:substring(data($x/DueDate), 6, 2), 
    fn:substring(data($x/DueDate), 9, 2) 
) 

有一個更短,更可讀的版本,太:

fn:string-join(fn:tokenize($x/DueDate, '-')) 

甚至更​​換使用正則表達式:

fn:replace($x/DueDate, '-', '') 
+0

但它仍然無法正常工作...我仍然得到這樣的東西:替換(2013-07-15,' - ','') – ridermule

+0

我正在使用altova xml間諜來驗證.... – ridermule

+0

在我看來, XML Spy只評估變量。請運行'$ x'並將結果發佈到gist或pastebin或類似的東西(如果它比幾個字符長)。並閱讀關於如何運行XQuery代碼的手冊,我從來沒有使用過XML Spy,也不知道任何關於它的內容 - 代碼非常好。 –

2

如果您在一個元素中使用它,你需要用括號括起括號,例如:

{ 
fn:concat(
    fn:substring(data($x/DueDate), 1, 4), 
    fn:substring(data($x/DueDate), 6, 2), 
    fn:substring(data($x/DueDate), 9, 2) 
) 
} 
+0

謝謝!!!!!這工作!萬分感謝!!!! – ridermule

+0

@ridermule - 你應該接受這個答案! –