2012-12-14 41 views
0

我正在使用一个简单的xml文件。解析后获取C结构中的垃圾字符

<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一个.c和h文件精简版使用下面的命令

xmlblit.exe -C testmeta.xmlb 

现在在我的应用main函数im调用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

写到xmlbooster支持得到了以下回复。

XMLBooster Lite仅支持Java; C仅用于评估目的,因为值在您的示例程序和生成的代码中已经注意到了。您需要购买XMLBooster Pro以生成C中的生产级解析器。

得到了答案,希望这也有助于他人尝试。