繁体   English   中英

将 xml 转换为表 postgresql 9.2 时出错

[英]error in converting xml to table postgresql 9.2

我有以下函数来转换用 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

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

您的结果符合预期。

您可以查找 html 实体&lt;

" 要显示小于号 (<),我们必须写: &lt;&#60; "

&gt; ( >)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM