我的xsdata Python代码报ParserError Unknown property错误是什么问题?
异常触发原因
- 你配置的字段元数据不符合xsdata的绑定规则:xsdata的XML映射相关配置需要放在字段
metadata的xsdata子字典中,你直接把name参数放在metadata第一层,xsdata无法识别,因此会使用默认命名转换规则,将蛇形命名的node_name转换为小驼峰的nodeName,和XML中的<NodeName>标签无法匹配,因此抛出未知属性异常。 - 列表类型字段未配置
wrapped=False参数,xsdata默认会为列表字段查找额外的父包裹标签,也可能引发匹配异常。
修复方案
你可以按照xsdata的规则调整元数据配置,修复后的完整代码如下:
from dataclasses import dataclass, field from typing import List from xsdata.formats.dataclass.parsers import XmlParser from xsdata.formats.dataclass.parsers.config import ParserConfig xml = """ <?xml version="1.0"?> <LineList> <Line> <ConnectionList> <Connection> <NodeName>ABC</NodeName> </Connection> <Connection> <NodeName>DEF</NodeName> </Connection> </ConnectionList> </Line> </LineList> """ @dataclass class MyConnection: node_name: str = field(metadata={"xsdata": {"name": "NodeName"}}) @dataclass class MyConnectionList: connections: List[MyConnection] = field( default_factory=list, metadata={"xsdata": {"name": "Connection", "wrapped": False}} ) @dataclass class MyLine: connection_list: MyConnectionList = field(metadata={"xsdata": {"name": "ConnectionList"}}) @dataclass class MyLineList: class Meta: name = "LineList" lines: List[MyLine] = field( default_factory=list, metadata={"xsdata": {"name": "Line", "wrapped": False}} ) config = ParserConfig(fail_on_unknown_properties=True) parser = XmlParser(config=config) obj = parser.from_string(xml, MyLineList) # 验证解析结果 print(obj.lines[0].connection_list.connections[0].node_name) # 输出ABC
内容的提问来源于stack exchange,提问作者dstrigl
相关产品推荐
相关产品推荐

