XMLElement函数编码XML<>到<和>

时间:2015-12-08 00:35:24

标签: sql xml postgresql psql

我想从内部XML开始构建一些xml,然后添加外部XML。这是我的代码的简化:

DO
$$
DECLARE
  v_xml           text;
  cmd             text;
BEGIN
  cmd := 'select xmlelement(name myelement, ''test'')';
  EXECUTE cmd INTO v_xml;
  v_xml := xmlelement(name parentXMl, v_xml);
  RETURN v_xml;
END;
$$

我希望这段代码能够返回:

<parentxml><myelement>test</myelement></parentxml>

相反,它返回:

<parentxml>&lt;myelement&gt;test&lt;/myelement&gt;</parentxml>

如何阻止XMLElement()将我的XML编码为XML值?

2 个答案:

答案 0 :(得分:2)

变量类型v_xmlcmd应为XML

CREATE OR REPLACE FUNCTION testxml() RETURNS XML AS $$
DECLARE
  v_xml           XML;
  cmd             XML;
BEGIN
  cmd := 'select xmlelement(name myelement, ''test'')';
  EXECUTE cmd INTO v_xml;
  v_xml := xmlelement(name parentXMl, v_xml);
  RETURN v_xml;
END;
$$ LANGUAGE plpgsql;

结果是:

ds=# select testxml();                                                                                                                          testxml                       
----------------------------------------------------
 <parentxml><myelement>test</myelement></parentxml>
(1 row)

答案 1 :(得分:1)

请记住,元素名称应始终引用

如果要将xml数据生成为文本值,请不要忘记之后将其转换为xml

DO
$$
DECLARE
  v_xml           text;
  cmd             text;
BEGIN
  cmd := 'select xmlelement(name "myelement", ''test'')';
  EXECUTE cmd INTO v_xml;
  v_xml := xmlelement(name "parentXMl", v_xml::xml);
  RETURN v_xml::xml;
END;
$$

Dimitry是对的,你最好将V_xml声明为xml变量。

相关问题