Python 使用BeautifulSoup从XML标记中的字符串中删除CRLF
下面是我正在学习使用Python和beautifulsoup解析的一个XML文件的摘录Python 使用BeautifulSoup从XML标记中的字符串中删除CRLF,python,xml,beautifulsoup,Python,Xml,Beautifulsoup,下面是我正在学习使用Python和beautifulsoup解析的一个XML文件的摘录 <xml> <codeblock> <syntax>configure</syntax> <syntax> context local</syntax> <syntax> interface <variable>interface_name<
<xml>
<codeblock>
<syntax>configure</syntax>
<syntax> context
local</syntax>
<syntax> interface <variable>interface_name</variable></syntax>
<syntax> ip
address <variable>ip_address</variable> <variable>subnet_mask</variable></syntax>
<syntax> exit</syntax>
<syntax> server
ftpd</syntax>
<syntax> ssh
key <variable>data</variable>
length <variable>octets</variable></syntax>
<syntax> ssh
key <variable>data</variable>
length <variable>octets</variable></syntax>
<syntax> ssh
key <variable>data</variable>
length <variable>octets</variable></syntax>
</codeblock>
</xml>
这会删除标记之间的“\n”,同时也会删除所有子标记()
感谢您在这方面的一些意见
我是一名技术作家,试图学习用python进行基本自动化活动的XML解析。也许我还没有完全理解这个问题,但这不会给你提供你想要的东西。如果没有,请运行它,看看出了什么问题,我们可以尝试找出答案
from bs4 import BeautifulSoup
soup = BeautifulSoup(xml)
for tag in soup.findAll('syntax'):
print tag.text.strip()
python IRC页面上的一位好心的绅士使用
NavigableString
帮助实现了以下完美的解决方案:
xml_string="""
<xml>
<codeblock>
<syntax>configure</syntax>
<syntax> context
local</syntax>
<syntax> interface <variable>interface_name</variable></syntax>
<syntax> ip
address <variable>ip_address</variable> <variable>subnet_mask</variable></syntax>
<syntax> exit</syntax>
<syntax> server
ftpd</syntax>
<syntax> ssh
key <variable>data</variable>
length <variable>octets</variable></syntax>
<syntax> ssh
key <variable>data</variable>
length <variable>octets</variable></syntax>
<syntax> ssh
key <variable>data</variable>
length <variable>octets</variable></syntax>
</codeblock>
</xml>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(xml_string,"xml")
for syntax in soup.find_all('syntax'):
new_tag = soup.new_tag('syntax')
for child in syntax.contents:
if "\n" in child:
new_tag.append(child.replace("\n", " "))
else:
new_tag.append(child)
syntax.replace_with(new_tag)
print soup
xml\u string=”“”
配置
上下文
地方的
接口名称
知识产权
地址ip\u地址子网\u掩码
出口
服务器
ftpd
ssh
关键数据
长度八位组
ssh
关键数据
长度八位组
ssh
关键数据
长度八位组
"""
从bs4导入BeautifulSoup
soup=BeautifulSoup(xml_字符串,“xml”)
对于soup.find_all('syntax')中的语法:
new_-tag=soup.new_-tag('语法')
对于syntax.contents中的子级:
如果子项中有“\n”:
新的\u标记.append(子.replace(“\n”,”))
其他:
新标签追加(子项)
语法。将_替换为(新_标记)
印花汤
输出:
<xml>
<codeblock>
<syntax>configure</syntax>
<syntax> context local</syntax>
<syntax> interface </syntax>
<syntax> ip address <variable>ip_address</variable> <variable>subnet_mask</variable></syntax>
<syntax> exit</syntax>
<syntax> server ftpd</syntax>
<syntax> ssh key <variable>data</variable> <variable>octets</variable> </syntax>
<syntax> ssh key <variable>data</variable> <variable>octets</variable> </syntax>
<syntax> ssh key <variable>data</variable> <variable>octets</variable></syntax>
</codeblock>
</xml>
配置
上下文局部
接口
ip地址ip地址子网掩码
出口
服务器ftpd
ssh密钥数据八位字节
ssh密钥数据八位字节
ssh密钥数据八位字节
tag.text.strip()似乎没有删除字符串中的回车符。但是,tag.text.replace(“\n”,”)似乎可以做到这一点。谢谢你给我指明了正确的方向。
<xml>
<codeblock>
<syntax>configure</syntax>
<syntax> context local</syntax>
<syntax> interface </syntax>
<syntax> ip address <variable>ip_address</variable> <variable>subnet_mask</variable></syntax>
<syntax> exit</syntax>
<syntax> server ftpd</syntax>
<syntax> ssh key <variable>data</variable> <variable>octets</variable> </syntax>
<syntax> ssh key <variable>data</variable> <variable>octets</variable> </syntax>
<syntax> ssh key <variable>data</variable> <variable>octets</variable></syntax>
</codeblock>
</xml>