BaseX:尝试在 XQuery Update Facility 中的命名空间之间移动元素



我想规范化XSD输入文件,将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 将返回未更改的输入文件。我确实更新了$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:存在,因为我有另一个文本处理程序,它只处理带有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

相关内容

  • 没有找到相关文章

最新更新