summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoss Burton <ross@linux.intel.com>2010-08-12 14:56:34 +0100
committerRoss Burton <ross@linux.intel.com>2010-10-05 13:03:53 +0100
commit96e60c57663e949c34a248ac62ffa86da1c636aa (patch)
tree595d679f1004296f8d7fb25b48578211167550d0
parent0b554e605b50562b3e6af066ef4d7687993fe62f (diff)
downloadlibrest-96e60c57663e949c34a248ac62ffa86da1c636aa.tar.gz
Add rest_xml_parser_parse_from_data_full
This allows the caller to pass in a base URI and character encoding.
-rw-r--r--rest/rest-xml-parser.c27
-rw-r--r--rest/rest-xml-parser.h6
2 files changed, 31 insertions, 2 deletions
diff --git a/rest/rest-xml-parser.c b/rest/rest-xml-parser.c
index 0d78273..bfffa79 100644
--- a/rest/rest-xml-parser.c
+++ b/rest/rest-xml-parser.c
@@ -277,6 +277,29 @@ rest_xml_parser_parse_from_data (RestXmlParser *parser,
const gchar *data,
goffset len)
{
+ return rest_xml_parser_parse_from_data_full (parser, data, len, NULL, NULL);
+}
+
+/**
+ * rest_xml_parser_parse_from_data_full:
+ * @parser: a #RestXmlParser
+ * @data: the XML content to parse
+ * @len: the length of @data
+ * @base_url: the base URL, or %NULL if unknown
+ * @encoding: the character encoding, or %NULL if unknown
+ *
+ * Parse the XML in @data, and return a new #RestXmlNode. If @data is invalid
+ * XML, %NULL is returned.
+ *
+ * Returns: a new #RestXmlNode, or %NULL if the XML was invalid.
+ */
+RestXmlNode *
+rest_xml_parser_parse_from_data_full (RestXmlParser *parser,
+ const gchar *data,
+ goffset len,
+ const gchar *base_url,
+ const gchar *encoding)
+{
xmlTextReaderPtr reader;
RestXmlNode *cur_node = NULL;
RestXmlNode *new_node = NULL;
@@ -295,8 +318,8 @@ rest_xml_parser_parse_from_data (RestXmlParser *parser,
reader = xmlReaderForMemory (data,
len,
- NULL, /* URL? */
- NULL, /* encoding */
+ base_url,
+ encoding,
XML_PARSE_RECOVER | XML_PARSE_NOCDATA);
while (xmlTextReaderRead (reader) == 1)
diff --git a/rest/rest-xml-parser.h b/rest/rest-xml-parser.h
index 967c2cf..54ea449 100644
--- a/rest/rest-xml-parser.h
+++ b/rest/rest-xml-parser.h
@@ -83,6 +83,12 @@ RestXmlNode *rest_xml_parser_parse_from_data (RestXmlParser *parser,
const gchar *data,
goffset len);
+RestXmlNode *rest_xml_parser_parse_from_data_full (RestXmlParser *parser,
+ const gchar *data,
+ goffset len,
+ const gchar *base_url,
+ const gchar *encoding);
+
GType rest_xml_node_get_type (void);
RestXmlNode * rest_xml_node_ref (RestXmlNode *node);