0

シンプルな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タイプ フィールドに不要な値を設定していることがわかりました。たとえばNAME、XML から名前を取得した後のフィールドの場合、コードには次のステートメントがあります。

/* Regexp */
if (strlen(obj->aNAME) > 0)
    (obj->aNAME)[0] = 'U';

誰もが同様の状況に直面しましたか?

4

1 に答える 1

0

xmlbooster のサポートに書いたところ、次の返信がありました。

XMLBooster Lite は Java のみをサポートします。C は評価目的でのみ提供されています。これは、サンプル プログラムと生成されたコードで気付いたように、値がスクランブルされているためです。C で製品レベルのパーサーを生成するには、XMLBooster Pro を購入する必要があります。

答えを得ました。これが実験中の他の人にも役立つことを願っています。

于 2012-12-17T09:17:19.897 に答える