Skip to main content
 首页 » 编程设计

python之如何自动关闭截断文件中的 xml 标签

2025年05月04日17EasonJim

当我公司的系统发生错误时,我会收到一封电子邮件。这封电子邮件包含全部挤在一行中的 XML。

我写了一个 notepad++ Python 脚本来解析除 XML 之外的所有内容并漂亮地打印出来。不幸的是,一些电子邮件包含过多的 XML 数据,因此被截断了。一般来说,截断的数据对我来说并不那么重要。我希望能够自动关闭所有打开的标签,以便我的 Python 脚本正常工作。它不需要聪明或正确,它只需要使 xml 的格式足以让脚本运行。有没有办法做到这一点?

我对 Python 脚本、在线应用程序、可下载应用程序等持开放态度。

  • 我意识到正确的解决方案是获取未截断的 xml,但使用正确的杠杆来完成工作要比处理它多得多。

请您参考如下方法:

使用Beautiful Soup

>>> 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”标签”

要创建一个 Notepad++ 脚本来处理这个问题,

  • download the tarball并提取文件
  • 将 bs4 目录复制到您的 PythonScript/scripts 文件夹。
  • 在 notepad++ 中将以下代码添加到你的 python 脚本中

#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)