3 回答
TA贡献1845条经验 获得超8个赞
下面(不使用任何外部库 - 只是核心 python)
import xml.etree.ElementTree as ET
root = ET.parse('input.xml')
head = root.find('.//head')
combined = ''.join(['<{}>{}</{}>'.format(e.tag,e.text,e.tag) for e in list(head)])
print(combined)
输入.xml
<?xml version="1.0" encoding="UTF-8"?>
<data>
<head>
<version>1.0</version>
<project>hello, world</project>
<date>2020-08-15</date>
</head>
<file name="helloworld.py"/>
<file name="helloworld.ps1"/>
<file name="helloworld.bat"/>
</data>
输出
<version>1.0</version><project>hello, world</project><date>2020-08-15</date>
TA贡献1786条经验 获得超13个赞
如果您可以使用外部库,BeautifulSoup 在这方面做得很好。
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#making-the-soup
这是您的文档的示例。
from bs4 import BeautifulSoup as bs
xml_doc = """<?xml version="1.0" encoding="UTF-8"?>
<data>
<head>
<version>1.0</version>
<project>hello, world</project>
<date>2020-08-15</date>
</head>
<file name="helloworld.py"/>
<file name="helloworld.ps1"/>
<file name="helloworld.bat"/>
</data>"""
page_soup = bs(xml_doc)
page_soup.head.getText()
page_soup.head.getText().strip().replace('\n','').replace(' ','')
这将返回 head 标签的子标签的内容,并去除换行符和空格。
TA贡献1815条经验 获得超6个赞
每种方法都可能有问题。有的方法还会删除有用的空格,有的方法在节点有属性的时候就麻烦了。所以我会给你第三种方法。这也可能是一种不完美的方法:)
from simplified_scrapy import SimplifiedDoc,utils
# xml_doc = utils.getFileContent('myfile.xml')
xml_doc = """<?xml version="1.0" encoding="UTF-8"?>
<data>
<head>
<version>1.0</version>
<project>hello, world</project>
<date>2020-08-15</date>
</head>
<file name="helloworld.py"/>
<file name="helloworld.ps1"/>
<file name="helloworld.bat"/>
</data>"""
doc = SimplifiedDoc(xml_doc)
headXml = doc.head.html.strip() # Get internal data of head
print (doc.replaceReg(headXml,'>[\s]+<','><')) # Replace newlines and spaces with regex
结果:
<version>1.0</version><project>hello, world</project><date>2020-08-15</date>
添加回答
举报