Xquery 如何整理Marklogic中的处理指令
我的旧数据库中有一个既不是有效的HTML也不是XML的内容。考虑到这一事实,很难清理遗留内容,我想使用xdmp:tidy在MarkLogic中整理一下。我目前正在使用ML-8Xquery 如何整理Marklogic中的处理指令,xquery,marklogic,tidy,htmltidy,marklogic-8,Xquery,Marklogic,Tidy,Htmltidy,Marklogic 8,我的旧数据库中有一个既不是有效的HTML也不是XML的内容。考虑到这一事实,很难清理遗留内容,我想使用xdmp:tidy在MarkLogic中整理一下。我目前正在使用ML-8 <sub> <p> <???†?> </p> </sub> 我正在以某种方式将此内容传递给tidy功能: declare variable $xml as node() := <cont
<sub>
<p>
<???†?>
</p>
</sub>
我正在以某种方式将此内容传递给tidy功能:
declare variable $xml as node() :=
<content>
<![CDATA[<p><???†?></p>]]>
</content>;
xdmp:tidy(xdmp:quote($xml//text()),
<options xmlns="xdmp:tidy">
<assume-xml-procins>yes</assume-xml-procins>
<quiet>yes</quiet>
<tidy-mark>no</tidy-mark>
<enclose-text>yes</enclose-text>
<indent>yes</indent>
</options>)
将变量$xml声明为节点():=
]>
;
xdmp:tidy(xdmp:quote($xml//text()),
对
对
不
对
对
)
因此,它返回:
<p>
<? ?†?>
</p>
现在这个结果不是有效的xml格式(我通过xml验证器检查了它),因此当我尝试将这个xml插入MarkLogic时,它会抛出一个错误,说“格式错误的主体|处理指令名称无效”
我在PIs做了一些调查,但运气不好。我可以尝试在没有PI的情况下保存内容,但这也不是一个有效的PI。这是因为您认为的PI实际上不是PI。 来自W3C: 2.6处理说明 [定义:处理说明(PI)允许文档包含 申请须知。] 处理指令 [16] PI::=''字符*)? “?>” [17] PITarget::=名称-('X'|'X')('M'|'M')('L'| "l") 那么PI名称不能以开头?与您的样品一样???† 在将内容传递给tidy之前,您可能需要清理内容。 如下图所示:
declare variable $xml as node() :=
<content><![CDATA[<p>Hello <???†?>world</p>]]></content>;
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),
<options xmlns="xdmp:tidy">
<assume-xml-procins>no</assume-xml-procins>
<quiet>yes</quiet>
<tidy-mark>no</tidy-mark>
<enclose-text>yes</enclose-text>
<indent>yes</indent>
</options>)
将变量$xml声明为节点():=
你好,世界]>;
将函数声明为本地:将($input as item()*)复制为item()*{
对于$input中的$node
返回
类型开关($node)
案例文本()
返回fn:replace($node,“]+\?>”,“”)
case元素()
返回
元素{name($node)}{
(:输出此元素中的每个属性:)
对于$node中的$att/@*
返回
属性{name($att)}{$att}
,
(:递归输出此元素的所有子元素:)
对于$node中的$child
返回本地:复制($child/node())
}
(:否则传递它。用于text()、注释和PI:)
默认返回$node
};
xdmp:tidy(本地:拷贝($xml),
不
对
不
对
对
)
这将有助于摆脱所有PI(真实和虚假PI)
问候,
彼得那是因为你认为的圆周率实际上不是圆周率。 来自W3C: 2.6处理说明 [定义:处理说明(PI)允许文档包含 申请须知。] 处理指令 [16] PI::=''字符*)? “?>” [17] PITarget::=名称-('X'|'X')('M'|'M')('L'| "l") 那么PI名称不能以开头?与您的样品一样???† 在将内容传递给tidy之前,您可能需要清理内容。 如下图所示:
declare variable $xml as node() :=
<content><![CDATA[<p>Hello <???†?>world</p>]]></content>;
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),
<options xmlns="xdmp:tidy">
<assume-xml-procins>no</assume-xml-procins>
<quiet>yes</quiet>
<tidy-mark>no</tidy-mark>
<enclose-text>yes</enclose-text>
<indent>yes</indent>
</options>)
将变量$xml声明为节点():=
你好,世界]>;
将函数声明为本地:将($input as item()*)复制为item()*{
对于$input中的$node
返回
类型开关($node)
案例文本()
返回fn:replace($node,“]+\?>”,“”)
case元素()
返回
元素{name($node)}{
(:输出此元素中的每个属性:)
对于$node中的$att/@*
返回
属性{name($att)}{$att}
,
(:递归输出此元素的所有子元素:)
对于$node中的$child
返回本地:复制($child/node())
}
(:否则传递它。用于text()、注释和PI:)
默认返回$node
};
xdmp:tidy(本地:拷贝($xml),
不
对
不
对
对
)
这将有助于摆脱所有PI(真实和虚假PI)
问候,
Peter您能举例说明您希望处理指令是什么样子吗?请不要在这里要求紧急情况-任何问题都不能插队,志愿者不喜欢匆忙。你能举一个例子说明你期望的处理指令是什么样子吗?请不要在这里问紧急情况-任何问题都不能插队,志愿者也不喜欢匆忙。这个答案既有效又完整[而且非常详细]。亲爱的Rachit-好好玩玩StackOverflow。。你要求紧急响应,人们花时间给出了令人惊讶的详细答案。现在请接受答案。这让人们明白,这个请求已经得到了响应,他们可以把精力花在帮助他人上。感谢大家的即兴回复&很抱歉,我急急忙忙地问了这个问题。但是我正在关注来自整洁者的回应。如果tidy抛出一个错误而不是创建一个无效的xml,那就太好了。清理内容对我没有多大帮助,因为内容可能太重,这会增加性能。我宁愿在遗留数据库中清理它。简而言之,我希望tidy抛出一个错误,说“内容不好或不干净”。你能帮帮我吗?嗨,拉希特,那你就完全不懂整洁的意思了。Tidy最初是为了自动修复html页面中的错误而创建的。有关解释,请参阅。如果主要目标是检查错误,那么最好使用一个像样的验证器。看,这个答案既有效又完整[而且非常详细]。亲爱的Rachit-好好玩玩StackOverflow。。你要求紧急响应,人们花时间给出了令人惊讶的详细答案。现在请接受答案。这让人们明白,这个请求已经得到了响应,他们可以把精力花在帮助他人上。感谢大家的即兴回复&很抱歉,我急急忙忙地问了这个问题。但是我正在关注来自整洁者的回应。那将是g