Python。获取没有空格的内部 XML

我有一个这样的 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>

我需要在元素之间没有空格的 head 元素中获取数据,如下所示:


<version>1.0</version><project>hello, world</project><date>2020-08-15</date>

然后散列它。现在,我必须进行一些字符串操作才能将其合并为一行:


root = ET.parse('myfile.xml').getroot()

header = ET.tostring(root[0]).decode('utf-8')

import re

header = re.sub('\n','',header)

header = re.sub('>\s+<','><',header)

header = header.replace('<head>','')

header = header.replace('</head>','')

header = header.strip()

有没有更简单的方法来做到这一点?Powershell XML 对象有一个简单的 InnerXML 属性,它为您提供一个元素中没有空格的 XML 作为字符串。Python 是否有一种方法可以使这更容易?


九州编程
浏览 137回答 3
3回答

精慕HU

下面(不使用任何外部库 - 只是核心 python)import xml.etree.ElementTree as ETroot = 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>&nbsp; &nbsp; <head>&nbsp; &nbsp; &nbsp; &nbsp; <version>1.0</version>&nbsp; &nbsp; &nbsp; &nbsp; <project>hello, world</project>&nbsp; &nbsp; &nbsp; &nbsp; <date>2020-08-15</date>&nbsp; &nbsp; </head>&nbsp; &nbsp; <file name="helloworld.py"/>&nbsp; &nbsp; <file name="helloworld.ps1"/>&nbsp; &nbsp; <file name="helloworld.bat"/></data>输出<version>1.0</version><project>hello, world</project><date>2020-08-15</date>

开满天机

如果您可以使用外部库,BeautifulSoup 在这方面做得很好。https://www.crummy.com/software/BeautifulSoup/bs4/doc/#making-the-soup这是您的文档的示例。from bs4 import BeautifulSoup as bsxml_doc = """<?xml version="1.0" encoding="UTF-8"?>&nbsp;<data>&nbsp;<head>&nbsp; &nbsp; &nbsp;<version>1.0</version>&nbsp; &nbsp; &nbsp;<project>hello, world</project>&nbsp; &nbsp; &nbsp;<date>2020-08-15</date>&nbsp;</head>&nbsp;<file name="helloworld.py"/>&nbsp;<file name="helloworld.ps1"/>&nbsp;<file name="helloworld.bat"/></data>"""page_soup = bs(xml_doc)page_soup.head.getText()page_soup.head.getText().strip().replace('\n','').replace(' ','')这将返回 head 标签的子标签的内容,并去除换行符和空格。

红糖糍粑

每种方法都可能有问题。有的方法还会删除有用的空格,有的方法在节点有属性的时候就麻烦了。所以我会给你第三种方法。这也可能是一种不完美的方法:)from simplified_scrapy import SimplifiedDoc,utils# xml_doc = utils.getFileContent('myfile.xml')xml_doc = """<?xml version="1.0" encoding="UTF-8"?>&nbsp;<data>&nbsp;<head>&nbsp; &nbsp; &nbsp;<version>1.0</version>&nbsp; &nbsp; &nbsp;<project>hello, world</project>&nbsp; &nbsp; &nbsp;<date>2020-08-15</date>&nbsp;</head>&nbsp;<file name="helloworld.py"/>&nbsp;<file name="helloworld.ps1"/>&nbsp;<file name="helloworld.bat"/></data>"""doc = SimplifiedDoc(xml_doc)headXml = doc.head.html.strip() # Get internal data of headprint (doc.replaceReg(headXml,'>[\s]+<','><')) # Replace newlines and spaces with regex结果:<version>1.0</version><project>hello, world</project><date>2020-08-15</date>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python