小建议:扩展XMLType以访问XPath标量函数

开发者在线 Builder.com.cn 更新时间:2007-06-05作者:builder.com.cn 来源:

本文关键词: XSLT xml

由于某种原因,XMLType XPath应用不允许输出标题结果。根据以下文档:

EXTRACT(XML)与EXISTSNODE函数类似。它应用一个VARCHAR2 XPath字符串,并返回一个包含XML片断的XMLType实例。

Extract仅返回一个XMLType。一个标量值是一个返回varchar2、数字或日期的函数。这意味着在XPath语句中,你可以使用node()之类的函数并返回一个XML片断。但如果你使用name(),它将返回指定元素的VARCHAR2名称,你会得到错误消息。

我经常需要使用name()和local-name()。许多时候,Count()是另一个很好用的函数。我决定编写我自己的析出函数。我希望对XMLType进行扩张,使其允许我增加自己的超载Extract。但我无法做到这一点。据信,XMLType是一个内置应用,而不是一个UDT,因此我不能对其进行扩张。

要达到相同的目的,还有别的方法。于是我建立自己的类型,它拥有一个XMLType属性;我建立自己的Extract,它叫做XSLT转换。现在如果在标准的XMLType和我自己建立的XMLType间来回移动会很麻烦,因此我加入骨架代码来调用Oracle XMLType。这样,我就能在正常使用XMLType的地方使用我的类型,只是它返回的是标量值。

这样做的好处是,我可以增加任何我认为需要的扩张。

在下面的代码中,我没有使用XMLType的每一个方法。我使用了一个超载Extract(),说明如何增加existsNode()和getStringVal()。如果你想对它进一步扩张,可以使用那个例子。

用户评论

  • 用户名
  • 评论内容