为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2023-06-06 15:59:15
我有一个这样的 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 reheader = 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 是否有一种方法可以使这更容易?
查看完整描述

3 回答

?
精慕HU

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>


查看完整回答
反对 回复 2023-06-06
?
开满天机

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 标签的子标签的内容,并去除换行符和空格。


查看完整回答
反对 回复 2023-06-06
?
红糖糍粑

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>


查看完整回答
反对 回复 2023-06-06
  • 3 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信