【发布时间】:2013-03-18 10:43:27
【问题描述】:
我正在试验 Python 和 Oracle XML DB。我在 Oracle 11g 数据库中有一个包含 XMLType 列和 ID 列的表。 XML 列的存储模型是对象关系的。有时我需要获取整个 XML 文件,而且通常超过 4000 个字符,因此我使用此查询来获取 CLOB:
select t.representation.getclobval()
from myxmldocs t
where id=:documentId
当我运行这个查询时,输出包括额外的空格,在我插入的 XML 文档中绝对不存在的 XML 元素之间带有换行符和制表符。效果是某种格式,所以输出看起来像这样:
<A>\n
\t<B></B>\n
\t\t<C>Some text</C>\n
\t\t<C>Some more text</C>\n
\t<B></B>\n
...
等等。相当漂亮和可读,但为什么我得到它?它还会弄乱我在额外空格上使用的其他库。
如果我删除 getclobval(),我的 Python 客户端不会得到一个 CLOB,而是一个对象,我不知道如何处理它。
这看起来是一致的;我使用 sqlplus 命令行客户端遇到了这个问题,并且还使用不同的 XML 模式创建了其他表,然后查询它们。在我的原型的早期版本中,我的 XMLType 列使用了 CLOB 存储模型并且没有这个问题。
我应该如何重写查询以获取带有 XML 文件的 CLOB,而不需要额外的格式?
更新:根据 cmets 的要求,这是我从命令行客户端运行查询 select dump(t.representation) from myxmldocs t where id=:documentId 得到的输出(当然,用数据库中的实际现有 ID 替换 :documentId):
DUMP(T.REPRESENTATION)
--------------------------------------------------------------------------------
Typ=58 Len=218: 32,156,148,1,0,0,0,0,80,193,223,20,0,0,0,0,216,15,47,21,0,0,0,0,
80,44,55,21,0,0,0,0,0,202,154,59,160,15,0,0,160,15,0,0,1,0,4,0,220,190,195,71,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,33,65,0,15,0,72,0,1,0,0,0,0,0,0,0,49,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0
【问题讨论】:
-
“它还会弄乱我正在使用的其他库,因为它会扼杀额外的空白。” - 那些图书馆很差。这些空格是完全合法的 XML。
-
同意,但我无法控制该库,它提供的功能从头开始重新实现非常非常耗时。
-
@Btz,你能用查询结果更新你的问题吗:
select dump(t.representation) from myxmldocs t where id=:documentId? -
刚刚用您的查询输出更新了问题,@A.B.Cade。