【问题标题】:xquery function to remove new line from xml elementxquery 函数从 xml 元素中删除新行
【发布时间】:2020-10-09 15:02:22
【问题描述】:

**当我尝试使用 xquery 映射为元素“x”分配一个大字符串值时,它正在创建一个新行。相反,我希望它没有新行。 **

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

要求

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

【问题讨论】:

  • 您需要分享您已经尝试做的事情,即实际的 XQuery。此外,这可能只是人眼问题。 XQuery 序列化控制 XQuery 输出规则。

标签: xml function xquery newline osb


【解决方案1】:

您可以通过递归类型切换函数运行它,对 text() 上的 X 元素到 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()))}
};

或者更一般地说,normalize-space() 代表所有 text() 节点:

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()))}
};

【讨论】:

  • 您好,先生,我尝试了同样的方法,它正在处理小字符串(例如:Y 元素),但对于具有大字符串值的 X,它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多