存储在Oracle中的clob中的XML的相当格式化

时间:2015-03-24 10:39:02

标签: xml oracle stored-procedures plsql xmltype

在我的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。

1 个答案:

答案 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>

这将创建我认为是您正在寻找的换行符和缩进,假设您在网页上显示数据