aboutsummaryrefslogtreecommitdiff
path: root/contrib/xml2/xpath.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2004-12-02 22:21:12 +0000
committerBruce Momjian <bruce@momjian.us>2004-12-02 22:21:12 +0000
commit1646586271ce980427ecce700aee48bbab974839 (patch)
tree88195831f2134189e3fffdd03861c959ad0ce80e /contrib/xml2/xpath.c
parent7af770d005b809bc0aa025605d7a369104e493bb (diff)
downloadpostgresql-1646586271ce980427ecce700aee48bbab974839.tar.gz
postgresql-1646586271ce980427ecce700aee48bbab974839.zip
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>
Diffstat (limited to 'contrib/xml2/xpath.c')
-rw-r--r--contrib/xml2/xpath.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c
index ca95d41c226..d3ac76b9ef5 100644
--- a/contrib/xml2/xpath.c
+++ b/contrib/xml2/xpath.c
@@ -40,6 +40,7 @@ static xmlXPathObjectPtr pgxml_xpath(text *document, xmlChar * xpath);
Datum xml_valid(PG_FUNCTION_ARGS);
+Datum xml_encode_special_chars(PG_FUNCTION_ARGS);
Datum xpath_nodeset(PG_FUNCTION_ARGS);
Datum xpath_string(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
*
pgxmlNodeSetToText(xmlNodeSetPtr nodeset,