自闭项标签出现在xquery中

时间:2013-12-22 09:14:25

标签: xquery weblogic-10.x

我正在开展一个迁移项目,其中weblogic将从weblogic 8迁移到10.x

我的应用程序使用xquery,当升级到更高版本时,我可以看到在转换的xml中创建了一些自闭关标签,而8.1的情况则不然。

例如: 我已经给出了一个简单的声明,如下所示

let $a  := <find an attribute value>
return
<abc:value>{$a}</abc:value>

如果“查找属性值”返回null,则在weblogic 8中,节点不会在转换后的xml中发送,但在weblogic10.x中,它将解析节点为自关闭节点,如<abc:value/>

这是迁移问题吗?我知道xquery升级到2004年,我确实照顾了那部分。 10次​​标签:weblogic10_3,xmlquery,xquery

2 个答案:

答案 0 :(得分:1)

似乎没有任何问题。

所有空标签都可以由自闭标签替换。从XML解析器的角度来看,它们完全相同。它是依赖于实现的 表示它选择的空标记,<abc:value/><abc:value></abc:value>。此行为可能会在发行版之间发生变化。

来自XML recommendations

  

空元素标签可用于任何没有内容的元素

可能有一个选项来指定空标记的编码,但任何XML解析器都必须同时处理两个版本。

答案 1 :(得分:1)

如果您的旧代码不接受正确的XML,那么正确的答案就是修复旧代码。这两种形式在语义上是相同的,如果代码不接受它不处理XML,无论它声称什么。

如果您无法修复它,我建议您编写一个单独的阶段,将XML文件作为文本处理,找到您不喜欢的空元素表单,并将其替换为您执行的操作。 。警告:正确地做这件事并不容易;你必须处理CDATA部分逃逸等等。您最好的选择可能是开始使用正确编写的开源XML序列化程序(例如Apache代码中的序列化程序),并修改它处理空元素的方式。