2016-07-19 64 views
0

我有一個要求,其中XML元素節點表示'UseCountIds'具有多個出現次數和多個值。由於元素節點名稱保持不變,因此我需要將它們中的每一個區分爲UseCountIds1,UseCountIds2和UseCountIds3。如何使用XQuery輸出具有相同名稱[多次出現]但具有不同值的XML節點

截至目前,它只裝備了3次。

響應負載顯示如下。在哪個Xquery上執行。

  <entries> 
       <id>1</id> 
       <UseCountIds>100</UseCountIds> 
       <UseCountIds>200</UseCountIds> 
       <UseCountIds>300</UseCountIds> 
      </entries> 

使用Xquery,可以輸出到分隔文件。

 Output File 
     id,UseCountIds1,UseCountIds2,UseCountIds3 
     1,100,200,300 

期待您寶貴的想法。

+0

基本上,尋找提取相同的命名元素節點作爲唯一的。另外,如果沒有數據可用於所有節點或任何節點,請將其輸出爲空白或默認值。 –

回答

1

如果您的XML輸入的標籤結構是固定的,只有價值是可變的,那麼最簡單的查詢是

concat(
    "id,UseCountIds1,UseCountIds2,UseCountIds3&#xa;", 
    string-join(/entries/*, ',') 
) 

與任何兒童標籤的方法更通用的解決方案可能是

declare function f:label($element as element()) as xs:string { 
    if (count($element/../*[node-name(.)=node-name($element)]) gt 1) 
    then concat(local-name($element), count($element/preceding-sibling::*[node-name(.)=node-name($element)])) 
    else local-name($element) 
}; 

concat(string-join(/entries/*/f:label(.), ','), '&#xa;', 
string-join(/entries/*, ',') 
相關問題