2012-12-14 39 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中的生產級解析器。

得到了答案,希望這也有助於他人嘗試。