以下是我正在学习使用Python和beautifulsoup解析的一个XML文件的摘录。
<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>
我想就如何从&lt; syntax&gt;中的字符串中删除CRLF提出一些建议。短语要有&lt; syntax&gt;和&lt; / syntax&gt;在同一行中,同时保留字符串开头的缩进。
请注意&lt; codeblock&gt;标记出现在实际XML文件的多个级别中。
我尝试了以下代码:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open(opxmlFilename),'xml')
for tag in soup.find_all('syntax'):
tag.string = str(tag.text).replace("\n", " ")
虽然这会删除&lt; syntax&gt;之间的'\ n'。 tag,它还会删除所有子标记(&lt; variable&gt;)。
赞赏一些投入。
我是一名技术作家,他正在尝试使用python学习XML解析以进行基本的自动化活动。
答案 0 :(得分:0)
也许我不完全理解这个问题,但这不会给你带来你想要的东西。如果没有,请运行它,看看有什么不对,我们可以尝试解决这个问题。
from bs4 import BeautifulSoup
soup = BeautifulSoup(xml)
for tag in soup.findAll('syntax'):
print tag.text.strip()
答案 1 :(得分:0)
来自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>
<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>