下面是我试图用MXML库解析的XML文件:
<?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')。
下面是我的代码的一部分:
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可以工作。但是我得到了一个分段错误(核心转储)错误。
有谁可以帮我?提前感谢
编辑:我找到了解决方案(它在我的例子中有效...)。希望它能帮上忙。
只需使用以下命令打开该文件:
tree = mxmlLoadFile(NULL, "Test.xml", MXML_OPAQUE_CALLBACK);
并通过下面的代码获得值:
printf("msgType : %s", node_tmp->child->value.opaque);
发布于 2014-01-22 23:59:53
要获取元素的文本,您应该使用
mxmlGetText(node_tmp,0)
代替node_tmp->child->value.text.string
发布于 2014-01-23 00:03:07
尝尝这个
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);
}
发布于 2014-01-29 16:31:20
您应该测试节点的类型,并且应该在mxmlFindElement
中使用node
更改tree
,因为它会导致标记<?xml version="1.0" encoding="utf-8"?>
出现问题
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);
}
https://stackoverflow.com/questions/21287665
复制相似问题