[Gpsbabel-code] hsa format XML ugliness
Brought to you by:
robertl
From: Robert L. <rob...@us...> - 2004-10-01 04:56:50
|
I need someone that understands HSANDV format. Sven, can you help us, please? I was just staring at a testsuite problem and came across a test case that triggered under the hsandv format. The fix itself is pretty obvious when you realize you can have XML entities in the formats you're trying to write: Index: hsa_ndv.c =================================================================== RCS file: /cvsroot/gpsbabel/gpsbabel/hsa_ndv.c,v retrieving revision 1.4 diff -p -u -r1.4 hsa_ndv.c --- hsa_ndv.c 17 Sep 2004 16:32:50 -0000 1.4 +++ hsa_ndv.c 1 Oct 2004 04:50:43 -0000 @@ -301,6 +301,8 @@ static int legNum = 0; static void hsa_ndv_waypt_pr(const waypoint *waypointp) { + char *sn = xml_entitize(waypointp->shortname); + char *de = xml_entitize(waypointp->description); fprintf(ofd, "\t\t<Object>\n"); @@ -310,7 +312,7 @@ hsa_ndv_waypt_pr(const waypoint *waypoin // fprintf(ofd, "\t\t\t<FeatureNameSubDiv>1</FeatureNameSubDiv>\n"); // fprintf(ofd, "\t\t\t<FeatureNameNumber>1089009023</FeatureNameNumber>\n"); fprintf(ofd, "\t\t\t<Attr>attr=grpnam%s\x1ftrnrad50\x1fOBJNAM%s\x1flegnum%i\x1fusrmrk%s\x1fselect2</Attr>\n", - routeName, waypointp->shortname, legNum, waypointp->description); + routeName, sn, legNum, de); fprintf(ofd, "\t\t\t<LegAttr>attr=grpnam%s\x1f</LegAttr>\n", routeName); fprintf(ofd, "\t\t\t<NumberOfVertexs>1</NumberOfVertexs>\n"); fprintf(ofd, "\t\t\t<Latitude>%lf</Latitude>\n", waypointp->latitude); @@ -318,6 +320,8 @@ hsa_ndv_waypt_pr(const waypoint *waypoin fprintf(ofd, "\t\t</Object>\n"); + xfree(sn); + xfree(de); legNum++; } But then I realized that the sample file that's checked in is pretty wrong, too, as it contains lines like: <Attr>attr=grpnamROUTENAME^_trnrad50^_OBJNAMGC2723^_legnum4^_usrmrkLogan Lighthouse by JoGps & Family^_select2^_</Attr> and <Attr>attr=grpnamROUTENAME^_trnrad50^_OBJNAMGC309F^_legnum6^_usrmrkShy's Hill by FireFighterEng33^_select2^_</Attr> "But wait", said I, "How did this get past validation?" The answer is that it doesn't get far enough to trigger becuase the 0x1f's that are in the <Attr> tags (and why are there a half dozen fields in one tag? Doesn't that sort of defeat the point of XML?) choke the validators anyway. If I don't make the change above, hsandv format won't read its own output if the datastrea has an ampersand, apostrophe, greater than, or any of those other XML-killing tokens. Advice, please. RJL |