我有一个包含一个有趣评论的xml文件,我想解析它。
Here我发现了如何处理评论,但我不知道如何在我的主应用中使用它们。
#!/usr/bin/python3
import xml.etree.ElementTree as ET
with open('xml_with_comments.xml', 'w') as f:
f.write('''<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<blah>node 1</blah>
<!-- secret_content: Hello! -->
<blah>node 2</blah>
<!-- A standard comment -->
<blah>node 3</blah>
</root>
''')
class TreeBuilderWithComments(ET.TreeBuilder):
def comment(self, data):
if data.startswith(' secret_content: '):
self.start(ET.Comment, {})
self.data(data)
self.end(ET.Comment)
print('Secret content from TreeBuilderWithComments: ' + data[17:-1])
root = ET.parse('xml_with_comments.xml', parser=ET.XMLParser(target=TreeBuilderWithComments())).getroot()
for blah in root.findall('blah'):
print(blah.text)
输出:
Secret content from TreeBuilderWithComments: Hello!
node 1
node 2
node 3
现在我想做一些像print(root.get_secret_content())
这样的事情,它应该打印文件的第一个评论,开始于&#39; secret_content:&#39;。
答案 0 :(得分:1)
您在TreeBuilderWithComments()
的调用中创建ET.parse
的实例,如果您保留对它的引用,则可以使用该实例获取秘密内容:
# do this first.
comment_handler = TreeBuilderWithComments()
root = ET.parse('xml_with_comments.xml',
parser=ET.XMLParser(target=comment_handler)
).getroot() # ^^ used here!
for blah in root.findall('blah'):
print(blah.text)
然后,您可以对.get_secret_content
类实施TreeBuilderWithComments
并在comment_handler
实例上使用它。