ET.fromstring 给出 ParseError

问题描述 投票:0回答:1

我正在尝试解析 xml 字符串,我只想要 PackageReference Include 属性详细信息及其版本。当我说 ET.fromstring(xml) 时,它会给出类似

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 284, column 84
的错误。我验证了该 xml 在多个网站上是否有效,并且我的 xml 似乎没有问题并且格式良好。请帮忙。

import xml.etree.ElementTree as ET

thisDict={}

def parseXMLInCsProj(xml):
  tree = ET.fromstring(xml)
  for packageReference in tree.findall('.//PackageReference'):
     if packageReference is None:
        continue
     if 'Include' in packageReference:
        key=packageReference.get('Include')
     child_item=packageReference.find('.//Version').text
     thisDict[key]=child_item


xmlstr=f'''<?xml version="1.0" encoding="utf-8"?>
'''

xmlstr1=f''' 调试 任意CPU 8.0.30703 2.0 dgfdgfg EXE文件 特性 Labcyte.Echo.服务器 回声服务器 v4.8.1 第512章 发布 真的 磁盘 错误的 前景 7 天 错误的 错误的 真的 0 1.0.0.%2a 错误的 错误的 真的 真的 真的 满的 错误的 bin\调试 跟踪;调试 迅速的 4 错误的 x64 没有任何 真的 bin\释放 痕迹 迅速的 4 错误的 x64 真的 bin\x86\调试 调试;跟踪 满的 x86 迅速的 最小推荐规则.ruleset 错误的 bin\x86\发布 痕迹 真的 仅PDB x86 迅速的 最小推荐规则.ruleset 真的 真的 bin\x64\调试 跟踪;调试 满的 x64 7.3 迅速的 bin\x64\发布 痕迹 真的 x64 7.3 迅速的 ......\Library\EchoNET\EchoNETServer\InstallerUtil.dll ......\Library\Core\CoreClient\Labcyte.Core.CommonInterface.dll ......\Library\Core\CoreClient\Labcyte.Core.EventServer.dll ......\Library\Core\CoreClient\Labcyte.Core.Interface.dll 错误的 ......\Library\EchoNET\EchoNETServer\Labcyte.EchoNET.Common.dll 错误的 ......\Library\EchoNET\EchoNETServer\Labcyte.EchoNET.Data.dll 错误的 ......\Library\EchoNET\EchoNETServer\Labcyte.EchoNET.EchoNETScripts.dll ......\Library\EchoNET\EchoNETServer\Labcyte.EchoNET.HostServices.dll 错误的 ......\Library\EchoNET\EchoNETServer\Labcyte.EchoNET.Instrument.dll 错误的 ......\Library\EchoNET\EchoNETServer\Labcyte.EchoNET.Interface.dll 错误的 ......\Library\EchoNET\EchoNETServer\Labcyte.EchoNET.ServiceEndpoints.dll 成分 成分 项目安装程序.cs 真的 真的 设置.settings 设计师 设置单个文件生成器 设置.Designer.cs 错误的 Microsoft .NET Framework 4 %28x86 和 x64%29 真的 错误的 .NET Framework 3.5 SP1 客户端配置文件 错误的 错误的 .NET框架3.5 SP1 错误的 错误的 Windows 安装程序 3.1 真的 哈吉吉吉 应用程序包装器 434554 流体传输接口 7686877 Harrier流体传输 89798798879 回声服务器API 7687687878787 Labcyte.Echo.EchoScripts 76567687887 EchoServerAPI.服务器 878989808899 Labcyte.Echo.命令 2.0.1 2.0.1 2.0.1 1.14.1 2.0.1 0.1.0.20130128 4.3.0 项目安装程序.cs rmdir /S /Q "$(TargetDir)ScriptClasses" mkdir "$(TargetDir)ScriptClasses" rmdir /S /Q "$(SolutionDir)..\Library\Echo\EchoServer" mkdir "$(SolutionDir)..\Library\Echo\EchoServer" mkdir "$(SolutionDir)..\Library\Echo\EchoServer\ScriptClasses"

复制“$(TargetDir)*.dll”“$(SolutionDir)..\Library\Echo\EchoServer”\” 复制“$(TargetDir)*.pdb”“$(SolutionDir)..\Library\Echo\EchoServer”\” 复制“$(SolutionDir)..\Library\EchoNET\EchoNETServer\ScriptClasses\*.cs”“$(TargetDir)ScriptClasses\” 复制“$(TargetDir)ScriptClasses\”“$(SolutionDir)..\Library\Echo\EchoServer”\ScriptClasses\” 复制“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8.1\Facades\System.Linq.*”“$(TargetDir)” 复制“C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.8.1 \ System.Core.dll”“$(TargetDir)” 复制“C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.8.1 \ Facades \ netstandard.dll”“$(TargetDir)” --> ''' 解析XMLInCsProj(xmlstr1)

编辑:按照建议我更新了我的 xml 字符串。现在我没有看到错误。但是,一旦调试器到达

for packageReference in tree.findall('.//PackageReference'):
行,程序就会终止。请帮忙。

python xml elementtree
1个回答
0
投票

v
n
之前的反斜杠必须转义,以防止被解释为转义代码本身

copy  "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\\v4.8.1\Facades\System.Linq.*"  "$(TargetDir)"
copy  "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\\v4.8.1\System.Core.dll"  "$(TargetDir)"
copy  "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\\v4.8.1\Facades\\netstandard.dll"  "$(TargetDir)"

\v
垂直选项卡
\n
换行

print("a\vb\na  b")
a
 b
a  b

转义反斜杠

print("a\\vb\\na  b")
a\vb\na  b
© www.soinside.com 2019 - 2024. All rights reserved.