簡體   English   中英

BaseX:嘗試在XQuery Update Facility中的名稱空間之間移動元素

[英]BaseX: Trying to move elements between namespaces in XQuery Update Facility

我想規范化XSD輸入文件,將xs:放在沒有xs:任何XSD元素之前xs: XQuery之前。

copy $c:=doc("test.xsd")
modify
(
  if($c/schema)
  then
  (
    for $item in $c//*
    where substring($item/text(), 1, 3) != "xs:"
    return rename node $item as concat("xs:", $item/text())
  )
  else ()
)
return $c

在沒有xs:前置的輸入XSD上運行此xqy xs:返回的輸入文件不變。 我確實更新了$c並將其返回。 那怎么了?

輸入文件:

<?xml version="1.0"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<element name="note" type="xs:string"/>

</schema>

預期輸出:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="note" type="xs:string"/>

</xs:schema>

PS:看來我的問題引起了混亂。 我需要xs: present,因為我有另一個文本處理程序,該程序只處理帶有xs:前綴的元素。

這應該可以工作(與您的方法非常相似):

copy $doc := doc("test.xsd")
modify (
  if($doc/*:schema) then (
    for $item in $doc//*
    let $name := name($item)
    where not(starts-with($name, 'xs:'))
    let $new-name := xs:QName('xs:' || replace($name, '^.+:', ''))
    return rename node $item as $new-name
  )
  else ()
)
return $doc

暫無
暫無

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

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