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

C# 如何从动态XML中读取tt:object的ObjectID及子节点Gender的值

解决思路

你需要先正确处理XML自带的命名空间,再用流式XML解析器逐段处理数据,无需加载全量XML,适配实时接收场景。

核心前提

首先明确XML中用到的命名空间映射,和示例头声明保持一致:

tt = http://www.onvif.org/ver10/schema
fc = http://www.onvif.org/ver20/analytics/humanface

所有带前缀的标签都需要绑定对应命名空间才能正确匹配。

Python 流式实现示例

用Python标准库xml.etree.ElementTree的iterparse接口实现流式解析,无需引入第三方依赖:

import xml.etree.ElementTree as ET

# 命名空间映射
NS = {
    "tt": "http://www.onvif.org/ver10/schema",
    "fc": "http://www.onvif.org/ver20/analytics/humanface"
}

# 这里可以替换为你实时接收的流对象,比如socket文件对象、http响应流等
stream = open("metadata_sample.xml", "rb")

for event, elem in ET.iterparse(stream, events=("end",)):
    # 匹配tt:Object标签加载完成事件
    if elem.tag == f"{{{NS['tt']}}}Object":
        # 读取ObjectId属性
        object_id = elem.get("ObjectId")
        print(f"ObjectId: {object_id}")
        # 查找子节点中的fc:Gender
        gender_node = elem.find(".//fc:Gender", namespaces=NS)
        if gender_node is not None:
            print(f"Gender: {gender_node.text.strip()}")
        # 清理已处理元素,释放内存,避免大流量下内存溢出
        elem.clear()

运行结果(对应你提供的示例XML)

ObjectId: 733
ObjectId: 759
ObjectId: 760
ObjectId: 761
ObjectId: 758
Gender: Male

其他语言适配思路

所有语言的实现逻辑完全一致:

  • 声明对应命名空间映射
  • 选用流式XML解析器(如Java的StAX、C#的XmlReader、Golang的xml.Decoder)
  • 监听tt:Object标签加载完成事件,读取属性后搜索子节点的fc:Gender文本即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:15:02