簡體   English   中英

xquery function 從 xml 元素中刪除新行

[英]xquery function to remove new line from xml element

**當我嘗試使用 xquery 映射為元素“x”分配一個大字符串值時,它正在創建一個新行。相反,我希望它沒有新行。 **

<ABC> <X> 86E95A47AD2037B203521BBE7DAC71A11FE2DBD539D21CF66A9024B30505090F52F687F5BB299BD21A25E2ED01079A009B25FCFB7DCCBAF1DAB16E78B8CE179A922B94957989DBF531F967E46ACFB1B474A6F4CFD6AFB8C61D5BBB62346C502F837A68A15CD12ED90C03371EFB8C9922FB6B7860 </X> <Y>70406352</Y> </ABC>

要求

<ABC> <X>86E95A47AD2037B203521BBE7DAC71A11FE2DBD539D21CF66A9024B30505090F52F687F5BB299BD21A25E2ED01079A009B25FCFB7DCCBAF1DAB16E78B8CE179A922B94957989DBF531F967E46ACFB1B474A6F4CFD6AFB8C61D5BBB62346C502F837A68A15CD12ED90C03371EFB8C9922FB6B7860</X> <Y>70406352</Y> </ABC>

您可以通過遞歸類型開關 function 運行它,對X元素進行特殊處理以在text() ) 上進行normalize-space() ) (或任何其他更具體的前導回車替換:

專門針對X元素及其text()

declare function local:filter($nodes){
  for $node in $nodes 
  return
    typeswitch ($node)
      case text() return $node
      case attribute() return $node
      case comment() return $node
      case processing-instruction() return $node
      case element (X) return element {name($node)} {( $node/@*, $node/node() except $node/text(), $node/text()/normalize-space())}
      default return element {name($node)} {($node/@*, local:filter($node/node()))}
};

或者更一般地說,所有text()節點的normalize-space()

declare function local:filter($nodes){
  for $node in $nodes 
  return
    typeswitch ($node)
      case text() return normalize-space($node)
      case attribute() return $node
      case comment() return $node
      case processing-instruction() return $node
      default return element {name($node)} {($node/@*, local:filter($node/node()))}
};

暫無
暫無

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

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