【发布时间】:2020-05-31 07:44:53
【问题描述】:
我必须解析大量 XML 文件并将其写入文本文件。但是,某些 XML 文件包含特殊/非法字符。我尝试过使用不同的方法,例如Escaping strings for use in XML 但我无法让它工作。我知道解决这个问题的一种方法是编辑 XML 文件本身,但是有数千个文件。
import os
from xml.etree import ElementTree
from xml.sax.saxutils import escape
fileNum = 0;
saveFile = open('NewYork_1.txt','w')
for path, dirs, files in os.walk("NewYork_1"):
for f in files:
fileName = os.path.join(path, f)
with open(fileName,'r', encoding='utf-8') as myFile:
# print(myFile.read())
if "&" in myFile:
myFile = myFile.replace("&", "&") #This does not work.
此外,一些 XML 文件中还包含 unicode。有表情符号。
<Thread>
<ThreadID></ThreadID>
<Title></Title>
<InitPost>
<UserID></UserID>
<Date></Date>
<icontent></icontent>
</InitPost>
<Post>
<UserID></UserID>
<Date></Date>
<rcontent></rcontent>
</Post>
</Thread>
【问题讨论】:
-
你检查
print(myFile)了吗?如果你想要这个文件,那么你必须write()它。 -
您是否有一个表现不佳的 xml 的简短示例?你是如何解析xml的? Unicode 在 xml 中是合法的,表情符号应该不会造成问题。
-
我的错误。上面的代码只是为了展示我如何解析文件。完整的程序能够写入输出文件。当 XML 文件中有特殊字符时,会报错 xml.etree.ElementTree.ParseError: undefined entity。因此它不会写出完整的结果。
-
它实际上是一个实体 (
&something;) 并且 xml 顶部是否有类似<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>的声明?举一个例子的原因是为了让我们可以看到有哪些可用的替代方案。 -
如果将所有
"&"替换为"&#38;",则存在损坏合法xml 实体的风险。
标签: python python-3.x xml xml-parsing elementtree