我使用的是简单的xml文件。
<COMPANY>
<EMPLOYEES>
<EMPLOYEE>
<NAME>BOB</NAME>
<EMPID>51211</EMPID>
<SEX>M</SEX>
<DOB>10-1-1982</DOB>
<DOJ>12-7-2001</DOJ>
</EMPLOYEE>
</EMPLOYEES>
</COMPANY>
xml助推器元定义文件的相同内容如下
<SYSTEM NAME="testmeta" >
<CCONFIG MAXLEN="100"
ARRAYSIZE="5"
FLATMODE="TRUE"/>
<ELEMENT NAME="COMPANY" TAG="COMPANY" MAIN="TRUE" >
<FIELDS>
<FIELD NAME="EMPLOYEES" REFTYPE="EMPLOYEE" MODE="DEFAULT" />
</FIELDS>
<FORMULA>
<ENCLOSED NAME="EMPLOYEES" >
<META NAME="COMMENT" >Target field is EMPLOYEES</META>
<REPEAT TARGET="EMPLOYEES" ATLEASTONE="TRUE" >
<ELEMENTREF NAME="EMPLOYEE" />
</REPEAT>
</ENCLOSED>
</FORMULA>
</ELEMENT>
<ELEMENT NAME="EMPLOYEE" TAG="EMPLOYEE" >
<FIELDS>
<FIELD NAME="NAME" TYPE="STRING" />
<FIELD NAME="EMPID" TYPE="INTEGER" />
<FIELD NAME="SEX" TYPE="STRING" />
<FIELD NAME="DOB" TYPE="STRING" />
<FIELD NAME="DOJ" TYPE="STRING" />
</FIELDS>
<FORMULA>
<CONCAT>
<ENCLOSED NAME="NAME" >
<META NAME="COMMENT" >Target field is NAME</META>
<PCDATA TARGET="NAME" />
</ENCLOSED>
<ENCLOSED NAME="EMPID" >
<META NAME="COMMENT" >Target field is EMPID</META>
<PCDATA TARGET="EMPID" />
</ENCLOSED>
<ENCLOSED NAME="SEX" >
<META NAME="COMMENT" >Target field is SEX</META>
<PCDATA TARGET="SEX" />
</ENCLOSED>
<ENCLOSED NAME="DOB" >
<META NAME="COMMENT" >Target field is DOB</META>
<PCDATA TARGET="DOB" />
</ENCLOSED>
<ENCLOSED NAME="DOJ" >
<META NAME="COMMENT" >Target field is DOJ</META>
<PCDATA TARGET="DOJ" />
</ENCLOSED>
</CONCAT>
</FORMULA>
</ELEMENT>
</SYSTEM>
使用以下命令
使用xmlbooster lite生成相同的.c和.h文件xmlblit.exe -C testmeta.xmlb
现在我在main
函数的应用程序中调用accept_COMPANY
函数并传递S_XMLB_CONTEXT
上下文对象。功能成功但是当我使用
printf("%s, %d, %s, %s, %s", En->aNAME,
En->aEMPID,
En->aSEX,
En->aDOB,
En->aDOJ);
printf("\n");
我正在打印垃圾字符,即使是整数aEMPID
值也是如此。
我正在使用Visual Studio 2010来编译和运行C程序。
尝试了Unicode和MultiByte项目,但没有获得正确的值。
我的输出为
UOB, 78, M, j0-1-1982, 1t-7-2001
调试生成的.c文件后发现,生成器正在为PCDATA
类型字段设置不需要的值。对于例如对于从XML检索名称后的NAME
字段,代码具有以下语句
/* Regexp */
if (strlen(obj->aNAME) > 0)
(obj->aNAME)[0] = 'U';
有人遇到过类似的情况吗?
答案 0 :(得分:0)
写给xmlbooster支持得到以下回复。
XMLBooster Lite仅支持Java; C仅用于评估目的,因为您在示例程序和生成的代码中注意到了值的加扰。您需要购买XMLBooster Pro才能在C中生成生产级解析器。
得到答案,希望这对正在进行实验的其他人也有所帮助。