c - 解析后在C结构中获取垃圾字符

标签 c xml

我正在使用一个简单的 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 booster 元定义文件如下

    <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';

有人遇到过类似的情况吗?

最佳答案

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

XMLBooster Lite only support Java ; C is only provided for evaluation purposes, as values are scrambled as you’ve noticed in your sample programs and in the generated code. You need to purchase XMLBooster Pro to generate production-level parsers in C.

得到了答案,希望这也能帮助其他正在尝试的人。

关于c - 解析后在C结构中获取垃圾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13875176/

相关文章:

c - 设置 int 的前 10 位

c - 如何读取 send(sock_fd, line, size, 0);?

python - Odoo 8 从向导打开 TreeView

C# 使用 XmlDocument 获取 XML 元素值

php - 简化 PHP DOM XML 解析——怎么做?

c - 为什么有些算术运算比平时花费更多的时间?

c - 局部静态变量和多线程——安全吗?

c - STM32F103RB中如何使用HAL实现抢占式调度

android - `titleTextAppearance` 不工作

java - Android ListView 项目太大不知道为什么