当我公司的系统生成错误时,我会收到一封电子邮件。这封电子邮件包含所有塞满一行的XML。
我编写了一个notepad ++ Python脚本,它解析除XML之外的所有内容,并且可以打印出来。不幸的是,有些电子邮件包含太多的XML数据而且会被截断。一般来说,截断的数据对我来说并不重要。我希望能够自动关闭任何打开的标签,以便我的Python脚本工作。它不需要是聪明的或正确的,它只需要使脚本运行得足够好。有没有办法做到这一点?
我对Python脚本,在线应用程序,可下载的应用程序等持开放态度。
答案 0 :(得分:3)
>>> import bs4
>>> s= bs4.BeautifulSoup("<asd><xyz>asd</xyz>")
>>> s
<html><head></head><body><asd><xyz>asd</xyz></asd></body></html>
>>
>>> s.body.contents[0]
<asd><xyz>asd</xyz></asd>
请注意,它会自动关闭“asd”标记“
要创建记事本++脚本来处理此问题,
#import Beautiful Soup
import bs4
#get text in document
text = editor.getText()
#soupify it to fix XML
soup = bs4.BeautifulSoup(text)
#convert soup object to string again
text = str(soup)
#clear editor and replace bad xml with fixed xml
editor.clearAll()
editor.addText(text)
#change language to xml
notepad.menuCommand( MENUCOMMAND.LANG_XML )
#soup has its own prettify, but I like the XML tools version better
notepad.runMenuCommand('XML Tools', 'Pretty print (XML only - with line breaks)', 1)
答案 1 :(得分:3)
如果你安装了BeautifulSoup and lxml,那就很简单了:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("""
... <?xml version="1.0" encoding="utf-8"?>
... <a>
... <b>foo</b>
... <c>bar</""", "xml")
>>> soup
<?xml version="1.0" encoding="utf-8"?>
<a>
<b>foo</b>
<c>bar</c></a>
注意构造函数的第二个"xml"
参数,以避免将XML解释为HTML。