Python 使用BeautifulSoup从XML标记中的字符串中删除CRLF

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<

下面是我正在学习使用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>
这会删除标记之间的“\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>