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

如何用Python提取XML中CDATA内部的XML数据

解析嵌套在CDATA中的XML数据解决方案

问题分析

CDATA块在XML解析器中会被当作纯文本处理,因此直接遍历外层XML节点无法获取其内部的XML结构。需要先提取CDATA文本内容,再单独解析这部分内容为XML。

完整解决方案代码

import xml.etree.ElementTree as ElementTree

# 解析外层XML文件
tree = ElementTree.parse('file.xml')
root = tree.getroot()

# 提取已实现的EventId
event_id = root.find('.//EventId').text
print(f"EventId: {event_id}")

# 获取PAYLOAD节点下的CDATA文本,清理多余空白字符
payload_cdata = root.find('.//PAYLOAD').text.strip()

# 将CDATA文本解析为XML树
payload_root = ElementTree.fromstring(payload_cdata)

# 定位_Type为Phone的CONTACT_POINT节点
phone_contact = payload_root.find(".//CONTACT_POINT[@_Type='Phone']")
if phone_contact:
    contact_type = phone_contact.get('_Type')
    contact_value = phone_contact.get('_Value')
    print(f"Phone Contact - Type: {contact_type}, Value: {contact_value}")

代码说明

  1. 提取CDATA内容:通过root.find('.//PAYLOAD').text获取PAYLOAD节点下的文本(即CDATA内容),用strip()去除首尾多余的换行和空格。
  2. 解析CDATA内的XML:使用ElementTree.fromstring()将纯文本格式的XML字符串转换为可操作的XML树结构。
  3. 定位目标节点:利用XPath表达式".//CONTACT_POINT[@_Type='Phone']"直接筛选出_Type属性为Phone的CONTACT_POINT节点。
  4. 获取属性值:通过.get()方法提取节点的_Type和_Value属性值。

测试输出

EventId: 122157660
Phone Contact - Type: Phone, Value: 1236573348

内容的提问来源于stack exchange,提问作者Sri Goverdhan Sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:37:14