对 Oracle 查询中的 XML 字符串进行编码
我直接从 Oracle 中的 PL/SQL 生成 XML。
在特殊字符和字符编码方面,确保输出字符串符合 XML 的首选方法是什么?
大多数XML文件是静态的,我们只需要输出少数字段的数据。
我认为不好的做法示例:
DECLARE @s AS NVARCHAR(100)
SELECT @s = 'Test chars = (<>, æøåÆØÅ)'
SELECT '<?xml version="1.0" encoding="UTF-8"?>'
+ '<root><foo>'
+ @s
+ '</foo></root>' AS XML
I'm producing XML right from PL/SQL in Oracle.
What is the preferred way of ensuring that outputted strings are XML-conformant, with regards to special characters and character encoding ?
Most of the XML file is static, we only need to output data for a few fields.
Example of what I consider bad practice:
DECLARE @s AS NVARCHAR(100)
SELECT @s = 'Test chars = (<>, æøåÆØÅ)'
SELECT '<?xml version="1.0" encoding="UTF-8"?>'
+ '<root><foo>'
+ @s
+ '</foo></root>' AS XML
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我发现有两种生成 XML 的好方法。其中之一是 SYS.XMLDOM 包,它本质上是 Java DOM API 的包装器。它有点笨重,因为 pl/sql 不具有 Java 的多态功能,因此您必须不断地显式地将元素“转换”为节点,反之亦然才能使用包中的方法。
在我看来,最酷的技术是使用 XMLElement 等 SQL 函数,如下所示:
如果您的 XML 结构不是很复杂并且可以轻松映射到表结构,那么这会非常方便。
There are two good ways to generate XML that I've found. One is the SYS.XMLDOM package which is essentially a wrapper around the Java DOM API. It's somewhat clunky because pl/sql doesn't have the polymorphic capabilities of Java, so you constantly have to explicitly "cast" elements to nodes and vice versa to use the methods in the package.
The coolest, IMO, technique is to use the XMLElement, etc, SQL functions like this:
If your XML structure is not very complex and maps easily to your table structure then this can be very handy.
使用 XmlElement、XmlAttribute...是生成 xml 的最佳方式。
以下链接对所有功能进行了很好的介绍:
http://download.oracle.com/ docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#ADXDB1620
如果您寻找更多方法,请查看此处
http://download.oracle.com/ docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#sthref1486
编码的内容。如果您在客户端会话中运行 pl/sql 程序或选择生成 xml。 xml 使用客户端代码页进行编码。如果您在后台作业中运行它(使用 dbms_job 或 dbms_scheduler),它将使用数据库代码页进行编码。
Using XmlElement, XmlAttribute, ... is the best way to generate xml.
The following link gives a good intro in all functions there are:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#ADXDB1620
If you look for some more ways, look at here
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#sthref1486
Whatchout for the encoding. If you run a pl/sql programm or a select generating xml in a client session. The xml is encoded with client codepage. If you run it in background job (using dbms_job or dbms_scheduler) it is encoded with database codepage.