From cef978c022b5e35cb024bb96668a0e1fb45da45a Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Thu, 3 Dec 2015 11:43:58 +0000 Subject: Misc (re #1882): Added feature of CDATA content handling into XML parser. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5206 74dad513-b988-da41-8d7b-12977e46ad98 --- pjlib-util/src/pjlib-util/xml.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'pjlib-util') diff --git a/pjlib-util/src/pjlib-util/xml.c b/pjlib-util/src/pjlib-util/xml.c index 654dd559..296b232e 100644 --- a/pjlib-util/src/pjlib-util/xml.c +++ b/pjlib-util/src/pjlib-util/xml.c @@ -130,7 +130,9 @@ static pj_xml_node *xml_parse_node( pj_pool_t *pool, pj_scanner *scanner) on_syntax_error(scanner); /* Sub nodes. */ - while (*scanner->curptr == '<' && *(scanner->curptr+1) != '/') { + while (*scanner->curptr == '<' && *(scanner->curptr+1) != '/' + && *(scanner->curptr+1) != '!') + { pj_xml_node *sub_node = xml_parse_node(pool, scanner); pj_list_push_back( &node->node_head, sub_node ); } @@ -140,6 +142,20 @@ static pj_xml_node *xml_parse_node( pj_pool_t *pool, pj_scanner *scanner) pj_scan_get_until_ch(scanner, '<', &node->content); } + /* CDATA content. */ + if (*scanner->curptr == '<' && *(scanner->curptr+1) == '!' && + pj_scan_strcmp(scanner, "content); + while (pj_scan_strcmp(scanner, "]]>", 3)) { + pj_str_t dummy; + pj_scan_get_until_ch(scanner, ']', &dummy); + } + node->content.slen = scanner->curptr - node->content.ptr; + pj_scan_advance_n(scanner, 3, PJ_TRUE); + } + /* Enclosing node. */ if (pj_scan_get_char(scanner) != '<' || pj_scan_get_char(scanner) != '/') on_syntax_error(scanner); -- cgit v1.2.3