5

我必须从 Oracle 中的一些表中生成 PL/SQL 中的 XML 文档。我以前从未这样做过,我发现似乎有几种主要方法可以做到这一点:

  • xmldom API
  • xml 函数(如 xmlelement、xmlagg、xmlroot)
  • dbms_xmlgen 函数

将引用 65 个表来生成单个文档,并且我将必须根据 xsd 验证输出。文档将分批生成(而不是按需生成)——我不知道这是否会有所不同。使用 Oracle 10g。

我最初倾向于使用 xmldom 包,因为它看起来更灵活,但我很难找到好的示例或文档,而 xml 函数似乎有更好的文档记录并且通常更受欢迎。是否有一个原因?

人们通常会为这类任务推荐什么方法?

4

4 回答 4

5

根据我的经验,DBMS_XMLGEN 非常适合快速而肮脏的数据到 xml 的转换,但我一直不太喜欢它,因为您必须将 SQL 作为字符串传递。另外,您对元素名称和 ROWSET/ROW 结构的控制受到严重限制。

XML 函数非常方便,如果您正在处理相对简单的结构,我最喜欢这些函数。例如,一旦您进入多个 XMLAgg 级别,我发现它很快就会陷入混乱。

XMLDOM 是生成 XML 最灵活的方式,尤其是在结构更复杂或涉及迭代逻辑的情况下。这里的主要缺点是它本质上是一个围绕 Java DOM 的包装器,其中大多数方法都接受 DOMNode 输入,但 PL/SQL 不直接支持多态性,因此最终会在 DOMElement 和 DOMNode 之间进行大量显式转换反之亦然,等等。通常我会创建自己的重载程序包来封装所有这些,并使其使用起来不那么痛苦。

于 2009-11-30T20:46:02.583 回答
2

好吧,我从来没有使用 Oracle 来生成任何非常复杂的 XML 文档,但是使用 DBMS_XMLDOC 非常容易。

您可能会在这里看到一个骨架(而在这里,只有 pl/sql 代码)。也使用谷歌代码搜索,肯定有更多的东西可以找到。
然后是DBMS_XMLDOM 参考,即使文档相当枯燥,它也会有所帮助。

确保您还阅读了这两篇文章:
http ://www.liberidu.com/blog/?p=365
http://www.liberidu.com/blog/?p=369

或者,您可以考虑使用 Java 存储过程生成 XML。

于 2009-11-30T20:36:05.977 回答
2

我通常使用 xml 函数(XMLElementXMLForest等),因为我可以控制 XSD。我使 XSD 通常与文档的结构相匹配,因此它们很好地匹配在一起。

如果您尝试使用的模式非常复杂或时髦,您应该考虑使用DBMS_XMLGENorDOM方法。

于 2009-11-30T20:42:12.563 回答
2

以下是对您可用的一些选项的很好讨论:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4980337843276

此外,如果您在 AskTom 上搜索“Sean Dillon”,您将获得大量文章,这些文章详细介绍了在 Oracle 中使用 XML 的各种问题和解决方案。

于 2009-11-30T23:22:22.533 回答