[英]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;"<a>a123b</a>"
2;NULL
但正确的结果应该是:
1;”<a>a123b</a>”
2;NULL
可以看出,字符<
和>
被错误地替换为<
和>
分别。
您的结果符合预期。
您可以查找 html 实体<
" 要显示小于号 (<),我们必须写: <
或<
"
>
( >)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.