You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用libyang解析LYS_ANYXML类型YANG数据并提取sync-state

解析LYS_ANYXML类型YANG数据获取sync-state值

因为目标节点的schema类型是LYS_ANYXML,libyang会将其内容作为未解析的原始XML块存储,而非标准的lyd_node子节点结构,所以直接调用lyd_child()会返回NULL。需要通过以下步骤解析:

步骤1:定位ANYXML节点

先通过lyd_child()找到包含ANYXML内容的sync节点:

lyd_node *sync_node = lyd_child(op, "urn:ietf:params:xml:ns:netconf:base:1.0", "data");
sync_node = lyd_child(sync_node, "urn:o-ran:sync:1.0", "sync");

步骤2:提取ANYXML的原始XML结构

使用lyd_anyxml_get()函数获取ANYXML节点对应的XML解析树(lyxml_elem类型):

if (sync_node && sync_node->schema && sync_node->schema->nodetype == LYS_ANYXML) {
    lyxml_elem *anyxml_root = lyd_anyxml_get(sync_node);

步骤3:遍历XML树查找sync-state节点

遍历lyxml_elem结构的子节点,定位到sync-state并提取其文本值:

if (anyxml_root) {
        // 查找sync-status节点
        lyxml_elem *sync_status = NULL;
        for (lyxml_elem *child = anyxml_root->children; child; child = child->next) {
            if (child->ns && !strcmp(child->ns->uri, "urn:o-ran:sync:1.0") && !strcmp(child->name, "sync-status")) {
                sync_status = child;
                break;
            }
        }

        if (sync_status) {
            // 查找sync-state节点
            lyxml_elem *sync_state_node = NULL;
            for (lyxml_elem *child = sync_status->children; child; child = child->next) {
                if (child->ns && !strcmp(child->ns->uri, "urn:o-ran:sync:1.0") && !strcmp(child->name, "sync-state")) {
                    sync_state_node = child;
                    break;
                }
            }

            if (sync_state_node && sync_state_node->text) {
                // 将值存入变量
                char sync_state_val[64] = {0};
                strncpy(sync_state_val, sync_state_node->text, sizeof(sync_state_val) - 1);
                // 此时sync_state_val即为"LOCKED"
            }
        }
    }
}

注意事项

  • 必须严格匹配节点的命名空间URI(urn:o-ran:sync:1.0),避免不同命名空间下的同名节点干扰。
  • 处理文本内容时注意内存边界,防止缓冲区溢出。
  • 可以将XML节点查找逻辑封装为通用函数,提升代码复用性。

内容的提问来源于stack exchange,提问作者Mohammed Safwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:00:08