晚安。我编写了这个类来解析 XML:
from xml.dom.minidom import parse
from xml.dom import minidom
class Book(object):
def __init__(self, filename):
self.filename = filename
def parse(self):
with open(self.filename, "r", encoding="UTF-8") as document:
document = parse(document)
print(document.version, document.encoding, document.standalone)
paragraphs = document.getElementsByTagName("section")
for paragraph in paragraphs:
text_nodes = [
node.nodeValue for node in paragraph.childNodes
if node.nodeType == minidom.Node.TEXT_NODE
]
text = "".join(text_nodes)
return text
当我输出结果时,有一个空行。 fb2文件本身是正确的,可以用程序打开。但它对我不起作用。这是为什么?
这就是内部循环的工作原理。首先,你只能得到解析最后一个section元素的结果(即文本没有被“累积”);其次,你需要再“更深”一层去提取文本。
附注:您不应将部分元素的搜索结果称为段落:)
在您的代码中,事实证明在
text_nodes然后在只有最后一段的text内容最终出现,因为这些变量在循环的每次迭代中都被重新分配。如果要查看所有段落的内容,则需要将所有段落收集到列表中,而不仅仅是最后一个段落,并在循环结束后将其转换为:text_nodestext