【问题标题】:error in converting xml to table postgresql 9.2将 xml 转换为表 postgresql 9.2 时出错
【发布时间】:2015-02-06 05:29:00
【问题描述】:

我有以下函数用于转换用 plpgsql 编写的 Postgresql 表中的 xml 数据:

CREATE OR REPLACE FUNCTION inicio_actualizacion(dato xml)
 RETURNS character varying AS
$BODY$
DECLARE
    VAR TEXT;   
BEGIN
    DELETE FROM p11;
    EXECUTE 'CREATE OR REPLACE VIEW tempinicio AS 
    WITH xml_import (xml_data) AS ( 
    SELECT XMLPARSE(DOCUMENT'||quote_literal(dato)||')),otemp1 AS ( SELECT 
    UNNEST(XPATH('||quote_literal('/pl:entrada/pl:row')||', xml_data, 
    ARRAY[array['||quote_literal('pl')||', '||quote_literal('http://xxx.yy.zz/')||']])) AS vector
    FROM xml_import)
    SELECT CAST((XPATH('||quote_literal('/row/p3c1/text()')||', vector)::VARCHAR[])[1] AS integer) AS p1c1,
    XMLPARSE(CONTENT (XPATH('||quote_literal('/row/p3c3/text()')||', vector)::VARCHAR[])[1]) AS p1c2 '
    ||'FROM otemp1';
    INSERT INTO p11 SELECT * FROM tempinicio;
    RETURN '00';
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

当我在 Postgres 9.2 版中使用表 entrada 执行此功能时:

entrada (p3c1 integer, p3c3xml)

包含以下两行:

1;"<![CDATA[<a>a123b</a>]]>"
2;"<b>c345d</b>" 

我得到以下 p11 的结果:

P11(p1c1 integer, p1c2 xml)
1;"&lt;a&gt;a123b&lt;/a&gt;"
2;NULL

但正确的结果应该是:

1;”<a>a123b</a>”
2;NULL

可以看出,&amp;lt;&amp;gt; 字符分别被错误地替换为 &amp;lt;&amp;gt;

【问题讨论】:

标签: xml postgresql plpgsql


【解决方案1】:

您的结果符合预期。

你可以查找html实体&amp;lt;

" 要显示小于号 (&lt; 或 &amp;#60;"

&amp;gt;(>)

参考https://www.w3schools.com/HTML/html_entities.asp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2020-02-27
    • 2013-05-23
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多