XMLSyntaxError:标记_io.TextIOWrapper中的数据过早结束-Python

时间:2018-07-09 14:19:06

标签: python xml-parsing syntax-error

我收到错误消息:“ XMLSyntaxError:标记_io.TextIOWrapper第1行,第1行,列119中的数据过早结束”,我不明白为什么...我检查了XML文件中是否有左方括号但没有...

想法?

非常感谢!

<Motor>
    <Materials_database>

        <Material name="Steel1">

            <CurveProperties>

                <Data Temperature="427" Start="2.4e+03" Stop="1.2e+05"></Data>

                <Data Temperature="760" Start="1e+03" Stop="2e+05"></Data>

                <Data Temperature="871" Start="2.4e+03" Stop="1.2e+05"></Data>

                <Data Temperature="982" Start="2.4e+03" Stop="1.2e+05"></Data>

            </CurveProperties>

        </Material>

    </Materials_database> 

</Motor>

Python代码:

with open(os.getcwd() + '\\materials.xml', "r" , encoding="utf-8") as dtfile:
    temp, start, stop = f.Get_MaterialDatabase(str(dtfile), matName)

功能:

def Get_MaterialDatabase(xml, MaterialName):

  Motor = objectify.fromstring(xml)                             
  for mat in Motor.Material_database.iterchildren():
    xmlMat = mat.get("name")
    print (xmlMat)
    if xmlMat == MaterialName:
        temp = mat.CurveProperties.get("Temperature")
        start = mat.CurveProperties.get("Start")
        stop = mat.CurveProperties.get("Stop")

return temp, start, stop

1 个答案:

答案 0 :(得分:0)

您首先必须阅读文件Get_MaterialDatabase(str(dtfile.read()), matName)

的内容

它是for mat in Motor.Materials_database.iterchildren():(材料 s

这些字段位于对象Data

  temp = mat.CurveProperties.Data.get("Temperature")
  start = mat.CurveProperties.Data.get("Start")
  stop = mat.CurveProperties.Data.get("Stop")

您在Data中有多个CurveProperties标签,请确保处理Data标签的列表。

下次遇到此类错误时,请尝试调试器,查看变量的值是什么,或者使用简单的打印语句print('xml=', xml)

从Windows XP开始,您无需在程序代码os.getcwd() + '/materials.xml'

中使用'\'作为目录分隔符