当前位置:  开发笔记 > 编程语言 > 正文

如何整理Marklogic中的处理指令

如何解决《如何整理Marklogic中的处理指令》经验,为你挑选了1个好方法。

我的内容在我的旧数据库中既不是有效的HTML也不是XML.考虑到这个事实,很难清理遗留问题,我想在MarkLogic中使用xdmp:tidy来整理它.我目前正在使用ML-8.


   

我正在通过某种方式将此内容传递给整洁的功能:

declare variable $xml as node() := 
       
           

]]>
; xdmp:tidy(xdmp:quote($xml//text()), yes yes no yes yes )

结果它返回:

现在这个结果不是有效的xml格式(我通过XML验证器检查过),因为当我尝试将这个XML插入MarkLogic时,它会抛出一个错误,说'MALFORMED BODY | 无效的处理指令名称'.

我对PI进行了一些调查,但没有太多运气.我本可以尝试在没有PI的情况下保存内容,但这也不是一个有效的PI.



1> prker..:

这是因为您认为PI实际上不是PI.来自W3C:

2.6处理说明

[定义:处理指令(PI)允许文档包含应用程序的说明.]

处理说明

[16] PI :: =''Char*)))?'?>'

[17] PITarget :: =名字 - (('X'|'x')('M'|'m')('L'|'l'))

那么PI名称不能以?开头?如你的样本??†您可能希望在将内容传递给整洁之前清理内容.如下所示:

declare variable $xml as node() := 
   Hello world

]]>
; declare function local:copy($input as item()*) as item()* { for $node in $input return typeswitch($node) case text() return fn:replace($node,"<\?[^>]+\?>","") case element() return element {name($node)} { (: output each attribute in this element :) for $att in $node/@* return attribute {name($att)} {$att} , (: output all the sub-elements of this element recursively :) for $child in $node return local:copy($child/node()) } (: otherwise pass it through. Used for text(), comments, and PIs :) default return $node }; xdmp:tidy(local:copy($xml), no yes no yes yes )

这样做可以摆脱所有PI(真实和假的PI)

问候,

彼得

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有