首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MXML C的问题

MXML C的问题
EN

Stack Overflow用户
提问于 2014-01-22 23:53:12
回答 3查看 795关注 0票数 0

下面是我试图用MXML库解析的XML文件:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<msg xmlns="http://uri.etsi.org/ori/002-2/v1.1.1">
    <header>
        <msgType>REQ</msgType>
        <msgUID>4567</msgUID>
    </header>
    <body>
        <updateSwPrepReq>
            <ftpSrvIpAddress>192.168.1.1</ftpSrvIpAddress>
            <ftpSrvUserName>SW_User</ftpSrvUserName>
            <ftpSrvPassword></ftpSrvPassword>
            <ftpSrvSwPkgDirPath>/swImages/acme</ftpSrvSwPkgDirPath>
            <SwUpgradePkgVer>RAN-201204-008</SwUpgradePkgVer>
        </updateSwPrepReq>
    </body>
</msg>

我可以解析并获取元素名称('msgTyp'e,'msgUID'),但不能解析和获取相关的值('REQ','4567')。

下面是我的代码的一部分:

代码语言:javascript
运行
复制
mxml_node_t      *tree = NULL;
mxml_node_t      *node = NULL;
mxml_node_t      *node_tmp = NULL;

tree = mxmlLoadFile(NULL, "Test.xml", MXML_TEXT_CALLBACK);

node = mxmlFindElement(tree, tree, "msg", NULL, NULL, MXML_DESCEND);
tmp = mxmlElementGetAttr(node, "xmlns");
printf("msg attribut : %s \n", tmp);

node_tmp = mxmlFindElement(tree, tree, "msgType", NULL, NULL, MXML_DESCEND);
if (node_tmp != NULL)
{
    printf("node_tmp not null");
    printf("msgType : %s", node_tmp->child->value.text.string);
}

node_tmp不是NULL,因为第一个printf可以工作。但是我得到了一个分段错误(核心转储)错误。

有谁可以帮我?提前感谢

编辑:我找到了解决方案(它在我的例子中有效...)。希望它能帮上忙。

只需使用以下命令打开该文件:

代码语言:javascript
运行
复制
tree = mxmlLoadFile(NULL, "Test.xml", MXML_OPAQUE_CALLBACK);

并通过下面的代码获得值:

代码语言:javascript
运行
复制
printf("msgType : %s", node_tmp->child->value.opaque);
EN

回答 3

Stack Overflow用户

发布于 2014-01-22 23:59:53

要获取元素的文本,您应该使用

代码语言:javascript
运行
复制
mxmlGetText(node_tmp,0)

代替node_tmp->child->value.text.string

票数 0
EN

Stack Overflow用户

发布于 2014-01-23 00:03:07

尝尝这个

代码语言:javascript
运行
复制
if (node_tmp != NULL)
{
    printf("node_tmp not null");
    mxml_node_t *b=mxmlWalkNext(node_tmp, tree, MXML_DESCEND_FIRST);
    printf("msgType : %s", b->value.text.string);
}
票数 0
EN

Stack Overflow用户

发布于 2014-01-29 16:31:20

您应该测试节点的类型,并且应该在mxmlFindElement中使用node更改tree,因为它会导致标记<?xml version="1.0" encoding="utf-8"?>出现问题

代码语言:javascript
运行
复制
mxml_node_t      *tree = NULL;
mxml_node_t      *node = NULL;
mxml_node_t      *node_tmp = NULL;

tree = mxmlLoadFile(NULL, "Test.xml", MXML_TEXT_CALLBACK);

node = mxmlFindElement(tree, tree, "msg", NULL, NULL, MXML_DESCEND);
tmp = mxmlElementGetAttr(node, "xmlns");
printf("msg attribut : %s \n", tmp);

node_tmp = mxmlFindElement(node, node, "msgType", NULL, NULL, MXML_DESCEND);
if (node_tmp != NULL && node_tmp->type == MXML_ELEMENT)
{
    printf("node_tmp not null\n");
    mxml_node_t *b=mxmlWalkNext(node_tmp, node, MXML_DESCEND_FIRST);
    if(b->type == MXML_TEXT)
        printf("msgType : %s\n", b->value.text.string);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21287665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档