Attached is a patch that adds the function xml_encode_special_chars to
the xml2 contrib module. It's against 8.0beta4. It's intended for commit. Markus Bertheau <twanger@bluetwanger.de>
This commit is contained in:
parent
7af770d005
commit
1646586271
@ -3,6 +3,9 @@
|
|||||||
CREATE OR REPLACE FUNCTION xml_valid(text) RETURNS bool
|
CREATE OR REPLACE FUNCTION xml_valid(text) RETURNS bool
|
||||||
AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict);
|
AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict);
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION xml_encode_special_chars(text) RETURNS text
|
||||||
|
AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict);
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION xpath_string(text,text) RETURNS text
|
CREATE OR REPLACE FUNCTION xpath_string(text,text) RETURNS text
|
||||||
AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict);
|
AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict);
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ static xmlXPathObjectPtr pgxml_xpath(text *document, xmlChar * xpath);
|
|||||||
|
|
||||||
|
|
||||||
Datum xml_valid(PG_FUNCTION_ARGS);
|
Datum xml_valid(PG_FUNCTION_ARGS);
|
||||||
|
Datum xml_encode_special_chars(PG_FUNCTION_ARGS);
|
||||||
Datum xpath_nodeset(PG_FUNCTION_ARGS);
|
Datum xpath_nodeset(PG_FUNCTION_ARGS);
|
||||||
Datum xpath_string(PG_FUNCTION_ARGS);
|
Datum xpath_string(PG_FUNCTION_ARGS);
|
||||||
Datum xpath_number(PG_FUNCTION_ARGS);
|
Datum xpath_number(PG_FUNCTION_ARGS);
|
||||||
@ -186,6 +187,34 @@ xml_valid(PG_FUNCTION_ARGS)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Encodes special characters (<, >, &, " and \r) as XML entities */
|
||||||
|
|
||||||
|
PG_FUNCTION_INFO_V1(xml_encode_special_chars);
|
||||||
|
|
||||||
|
Datum
|
||||||
|
xml_encode_special_chars(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
text *tin = PG_GETARG_TEXT_P(0);
|
||||||
|
text *tout;
|
||||||
|
int32 ressize;
|
||||||
|
xmlChar *ts, *tt;
|
||||||
|
|
||||||
|
ts = pgxml_texttoxmlchar(tin);
|
||||||
|
|
||||||
|
tt = xmlEncodeSpecialChars(NULL, ts);
|
||||||
|
|
||||||
|
pfree(ts);
|
||||||
|
|
||||||
|
ressize = strlen(tt);
|
||||||
|
tout = (text *) palloc(ressize + VARHDRSZ);
|
||||||
|
memcpy(VARDATA(tout), tt, ressize);
|
||||||
|
VARATT_SIZEP(tout) = ressize + VARHDRSZ;
|
||||||
|
|
||||||
|
xmlFree(tt);
|
||||||
|
|
||||||
|
PG_RETURN_TEXT_P(tout);
|
||||||
|
}
|
||||||
|
|
||||||
static xmlChar
|
static xmlChar
|
||||||
*
|
*
|
||||||
pgxmlNodeSetToText(xmlNodeSetPtr nodeset,
|
pgxmlNodeSetToText(xmlNodeSetPtr nodeset,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user