在我的Oracle数据库中,我有一个名为“TestTable”的表,其中包含一个主键列和一个名为“Message”的列,其类型为CLOB。
在我的程序中,我得到了这样的XML
<?xml version="1.0" encoding="utf-8" ?><TestMessage><Description>This is a test message</Description></TestMessage>
我的程序看起来像这样:
procedure StoreMessage(p_MessageId in raw,
p_Message in clob)
begin
update TestTable
set Message = p_Message
where MessageId = p_MessageId;
end
该过程应将传入的XML存储在clob列中,格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<TestMessage>
<Description>This is a test message</Description>
</TestMessage>
如何将邮件存储为clob,格式正确格式化为XML并保留相同的编码?
我的数据库中的NLS_CHARACTERSET是WE8MSWIN1252所以我不能使用XMLSERIALIZE,它会将编码更改为WINDOWS-1252。
答案 0 :(得分:1)
我会毫不犹豫地存储XML格式以及数据。
是否有特定原因必须将其存储为CLOB?如果将XML存储为Oracle XMLTYPE,那么验证和其他方法就在您的指尖。在内部,我相信它仍然存储为CLOB。
对于格式化和表示,我会将其保留在数据库之外,并使用某些东西(在我的情况下),如vkbeautify(和jQuery)(XML在DIV中显示为类:&#39; xmlcode&#39; :
<script type="text/javascript" src="~/Scripts/vkbeautify.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$(".xmlcode").each(function( index ) {
var decoded = unescapeHtml($(this).html());
var clean = vkbeautify.xml(decoded).trim();
$(this).html(escapeHtml(clean));
});
$(".xmlcode").wrapInner("<pre></pre>");
});
function unescapeHtml(safe) {
return $('<div />').html(safe).text();
}
function escapeHtml(unsafe) {
return $('<div />').text(unsafe).html()
}
</script>
这将创建我认为是您正在寻找的换行符和缩进,假设您在网页上显示数据