Removing newlines from XML data [https://github.com/clicon/clixon/issues/65]
This commit is contained in:
parent
26a75a4c50
commit
03ac48ab2b
6 changed files with 44 additions and 10 deletions
|
|
@ -1483,7 +1483,7 @@ _xml_parse(const char *str,
|
|||
{
|
||||
int retval = -1;
|
||||
struct xml_parse_yacc_arg ya = {0,};
|
||||
|
||||
cxobj *x;
|
||||
if (strlen(str) == 0)
|
||||
return 0; /* OK */
|
||||
if (xt == NULL){
|
||||
|
|
@ -1501,6 +1501,9 @@ _xml_parse(const char *str,
|
|||
goto done;
|
||||
if (clixon_xml_parseparse(&ya) != 0) /* yacc returns 1 on error */
|
||||
goto done;
|
||||
x = NULL;
|
||||
while ((x = xml_find_type(xt, NULL, "body", CX_BODY)) != NULL)
|
||||
xml_purge(x);
|
||||
/* Verify namespaces after parsing */
|
||||
if (xml_apply0(xt, CX_ELMNT, xml_localname_check, NULL) < 0)
|
||||
goto done;
|
||||
|
|
|
|||
|
|
@ -105,8 +105,8 @@ ncname {namestart}{namechar}*
|
|||
%%
|
||||
|
||||
<START,TEXTDECL>[ \t] ;
|
||||
<START,STATEA,CMNT,TEXTDECL>\n { _YA->ya_linenum++; }
|
||||
<START,STATEA,CMNT,TEXTDECL>\r
|
||||
<START,CMNT,TEXTDECL>\n { _YA->ya_linenum++; }
|
||||
<START,CMNT,TEXTDECL>\r
|
||||
|
||||
<START>{ncname} { clixon_xml_parselval.string = strdup(yytext);
|
||||
return NAME; /* rather be catch-all */
|
||||
|
|
@ -133,6 +133,10 @@ ncname {namestart}{namechar}*
|
|||
<STATEA>"<?" { BEGIN(PIDECL); return BQMARK; }
|
||||
<STATEA>\< { BEGIN(START); return *clixon_xml_parsetext; }
|
||||
<STATEA>& { _YA->ya_lex_state =STATEA;BEGIN(AMPERSAND);}
|
||||
<STATEA>[ \t] { clixon_xml_parselval.string = yytext;return WHITESPACE; }
|
||||
<STATEA>\r\n { clixon_xml_parselval.string = "\n";return WHITESPACE; }
|
||||
<STATEA>\r { clixon_xml_parselval.string = "\n";return WHITESPACE; }
|
||||
<STATEA>\n { clixon_xml_parselval.string = yytext; _YA->ya_linenum++;return WHITESPACE; }
|
||||
<STATEA>. { clixon_xml_parselval.string = yytext; return CHARDATA; }
|
||||
|
||||
/* @see xml_chardata_encode */
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
%start document
|
||||
|
||||
%token <string> NAME CHARDATA STRING
|
||||
%token <string> NAME CHARDATA WHITESPACE STRING
|
||||
%token MY_EOF
|
||||
%token VER ENC SD
|
||||
%token BSLASH ESLASH
|
||||
|
|
@ -357,12 +357,13 @@ prolog : xmldcl misclist
|
|||
;
|
||||
|
||||
misclist : misclist misc { clicon_debug(2, "misclist->misclist misc"); }
|
||||
| { clicon_debug(2, "misclist->"); }
|
||||
| { clicon_debug(2, "misclist->"); }
|
||||
;
|
||||
|
||||
/* [27] Misc ::= Comment | PI | S */
|
||||
misc : comment { clicon_debug(2, "misc->comment"); }
|
||||
| pi { clicon_debug(2, "misc->pi"); }
|
||||
misc : comment { clicon_debug(2, "misc->comment"); }
|
||||
| pi { clicon_debug(2, "misc->pi"); }
|
||||
| WHITESPACE { clicon_debug(2, "misc->white space"); }
|
||||
;
|
||||
|
||||
xmldcl : BXMLDCL verinfo encodingdecl sddecl EQMARK
|
||||
|
|
@ -424,6 +425,8 @@ content : element { clicon_debug(2, "content -> element"); }
|
|||
| pi { clicon_debug(2, "content -> pi"); }
|
||||
| CHARDATA { if (xml_parse_content(_YA, $1) < 0) YYABORT;
|
||||
clicon_debug(2, "content -> CHARDATA %s", $1); }
|
||||
| WHITESPACE { if (xml_parse_content(_YA, $1) < 0) YYABORT;
|
||||
clicon_debug(2, "content -> WHITESPACE %s", $1); }
|
||||
| { clicon_debug(2, "content -> "); }
|
||||
;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue