在C语言中使用mini-xml获取含d:id属性节点的值的问题
问题描述
已成功获取其他节点的字符串,但无法获取某一节点的值。d:id属性似乎导致了异常,无法得到值68857444。尝试了mxmlGetText、mxmlGetInteger等函数,均未返回目标值,mxmlGetElement返回cOwnedEntity,请问应该使用哪个函数?
尝试的代码示例:
mxml_node_t * node_numero_interne=mxmlFindElement(node_Signal, node_Signal, "cOwnedEntity", NULL, NULL, MXML_DESCEND_ALL); if(node_numero_interne!=NULL) // trouvé { const char *numero_interne=mxmlGetText(node_numero_interne, false); printf("numero interne = %s\n", numero_interne); }
解决方案
你的问题核心是命名空间未正确处理或用错了获取值的函数,分两种情况处理:
情况1:目标值是cOwnedEntity节点的d:id属性值
如果68857444是d:id属性的内容,需要用mxmlGetAttr(或mxmlGetAttrByNs)获取属性,同时在查找节点时指定命名空间URI:
// 替换成你的XML中d:前缀对应的实际命名空间URI const char *d_ns = "http://your-namespace-uri-for-d"; mxml_node_t * node_numero_interne = mxmlFindElement(node_Signal, node_Signal, "cOwnedEntity", d_ns, NULL, MXML_DESCEND_ALL); if(node_numero_interne != NULL) { // 获取d:id属性值 const char *numero_interne = mxmlGetAttr(node_numero_interne, "d:id"); // 或者用命名空间精准匹配 // const char *numero_interne = mxmlGetAttrByNs(node_numero_interne, d_ns, "id"); if(numero_interne != NULL) { printf("numero interne = %s\n", numero_interne); // 转成整数使用 int num = atoi(numero_interne); printf("numero interne (integer) = %d\n", num); } else { printf("未找到d:id属性\n"); } }
情况2:目标值是cOwnedEntity的子节点文本
如果68857444是cOwnedEntity节点下某个子节点的文本内容,需要先找到对应的子节点,再用mxmlGetText获取:
const char *d_ns = "http://your-namespace-uri-for-d"; mxml_node_t * node_numero_interne = mxmlFindElement(node_Signal, node_Signal, "cOwnedEntity", d_ns, NULL, MXML_DESCEND_ALL); if(node_numero_interne != NULL) { // 替换成实际存储目标值的子节点名称 mxml_node_t *id_subnode = mxmlFindElement(node_numero_interne, node_numero_interne, "TargetChildNode", NULL, NULL, MXML_DESCEND_FIRST); if(id_subnode != NULL) { const char *numero_interne = mxmlGetText(id_subnode, false); printf("numero interne = %s\n", numero_interne); } else { printf("未找到目标子节点\n"); } }
关键说明
- XML中的
d:前缀代表命名空间,mxmlFindElement的第四个参数必须传入对应的命名空间URI,否则无法匹配到正确的节点; mxmlGetText用于获取节点内部的文本内容,mxmlGetAttr用于获取节点的属性值,两者不可混用。
内容的提问来源于stack exchange,提问作者Michel Merle
相关产品推荐
相关产品推荐

