簡體   English   中英

通過 Xquery 更改節點名稱

[英]Changing node name via Xquery

我正在嘗試創建一個 xquery,只要“CNode3”的子元素(“CCNode1”)是“CCValue1”,它就會將節點的名稱從“CNode3”更改為“ChangedNode3”。

<PNode>
  <CNode1>Node1</CNode1>
  <CNode2>Node2</CNode2>
  <CNode3>
     <CCNode1>CCValue1</CCNode1>
     <CCNode2>CCValue2</CCNode2>
  </CNode3>
  <CNode3>
     <CCNode1>CCValue3</CCNode1>
     <CCNode2>CCValue4</CCNode2>
  </CNode3></PNode>

對於這種特定情況,在線沒有得到太多幫助。 我檢查了下面的鏈接,但它將所有“CNode3”的名稱更改為“ChangedNode3”。 PFB鏈接: http : //www.xqueryfunctions.com/xq/functx_change-element-names-deep.html

functx:change-element-names-deep()函數只計算元素名稱。 您需要更多的自定義。

您可以在本地函數中使用typeswitch

declare function local:transform($nodes as node()*) as item()* {
    for $node in $nodes
    return 
        typeswitch($node)
            case text() return $node
            case comment() return $node
            case attribute() return $node
            case processing-instruction() return $node
            case element(CNode3) 
              return 
                if ($node[CCNode1 eq "CCValue1"]) then 
                  element ChangedNode3 {( $node/@*, local:transform($node/node()) )} 
                else 
                  element {name($node)} {($node/@*, local:transform($node/node()))}
            case element() 
              return element {name($node)} {($node/@*, local:transform($node/node()))}
            default return local:transform($node/node())
};

typeswitch 轉換模式的完整描述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM