Python3-将每个字符附加到字符串(生成一行)
我有一个XML元素,如下所示: XMLPython3-将每个字符附加到字符串(生成一行),python,xml,python-3.x,beautifulsoup,Python,Xml,Python 3.x,Beautifulsoup,我有一个XML元素,如下所示: XML <page> <textline id="1"> <text>C</text> <text>o</text> <text>n</text> <text>t</text> <text>a</text> <te
<page>
<textline id="1">
<text>C</text>
<text>o</text>
<text>n</text>
<text>t</text>
<text>a</text>
<text>k</text>
<text>t</text>
</textline>
<textline id="2">
<text>
</text>
</textline>
<textline id="3">
<text>M</text>
<text>e</text>
</textline>
</page>
但是,text\u行
包括
的所有子项,这意味着它包括所有
标记
我似乎在文档中找不到任何解释如何只选择实际标记(而不是任何子项、子项等)的内容
我找到了recursive=False
选项,该选项只应选择直接子项,因此我认为可以将其应用于页面
标记:
text_lines = parsed_xml.find_all("page", recursive=False)
但这将返回一个空列表:[]
预期结果:
您可以使用clear()方法从
标记中移除所有内部
标记
还有一件事您不能将文件名发送到BeautifulSoup,您必须打开它并将内容发送给它,这里我将xml内容保存在一个变量中
myxml = """<page>
<textline id="1">
<text>C</text>
<text>o</text>
<text>n</text>
<text>t</text>
<text>a</text>
<text>k</text>
<text>t</text>
</textline>
<textline id="2">
<text>
</text>
</textline>
<textline id="3">
<text>M</text>
<text>e</text>
</textline>
</page>"""
parsed_xml = BeautifulSoup(myxml, 'xml')
text_lines = parsed_xml.find_all("textline")
for tl in text_lines:
tl.clear()
print(text_lines)
myxml=”“”
C
o
N
T
A.
K
T
M
E
"""
parsed_xml=BeautifulSoup(myxml,'xml')
text\u lines=已解析的xml.find\u all(“textline”)
对于文本行中的tl:
tl.clear()
打印(文本行)
输出:
[<textline id="1"/>, <textline id="2"/>, <textline id="3"/>]
xml = """<page>
<textline id="1">
<text>C</text>
<text>o</text>
<text>n</text>
<text>t</text>
<text>a</text>
<text>k</text>
<text>t</text>
</textline>
<textline id="2">
<text>
</text>
</textline>
<textline id="3">
<text>M</text>
<text>e</text>
</textline>
</page>"""
from bs4 import BeautifulSoup
parsed_xml = BeautifulSoup(xml, 'xml')
text_lines = []
for tag in parsed_xml.find_all("textline"):
tag.string = ''
text_lines.append(tag)
print(text_lines)
[<textline id="1"></textline>,
<textline id="2"></textline>,
<textline id="3"></textline>]
[,]
您可以设置string=''
Ex:
[<textline id="1"/>, <textline id="2"/>, <textline id="3"/>]
xml = """<page>
<textline id="1">
<text>C</text>
<text>o</text>
<text>n</text>
<text>t</text>
<text>a</text>
<text>k</text>
<text>t</text>
</textline>
<textline id="2">
<text>
</text>
</textline>
<textline id="3">
<text>M</text>
<text>e</text>
</textline>
</page>"""
from bs4 import BeautifulSoup
parsed_xml = BeautifulSoup(xml, 'xml')
text_lines = []
for tag in parsed_xml.find_all("textline"):
tag.string = ''
text_lines.append(tag)
print(text_lines)
[<textline id="1"></textline>,
<textline id="2"></textline>,
<textline id="3"></textline>]
xml=”“”
C
o
N
T
A.
K
T
M
E
"""
从bs4导入BeautifulSoup
已解析的_xml=beautifulsou(xml,'xml')
text_行=[]
对于已解析的xml中的标记。查找所有(“文本行”):
tag.string=''
文本\行。追加(标记)
打印(文本行)
输出:
[<textline id="1"/>, <textline id="2"/>, <textline id="3"/>]
xml = """<page>
<textline id="1">
<text>C</text>
<text>o</text>
<text>n</text>
<text>t</text>
<text>a</text>
<text>k</text>
<text>t</text>
</textline>
<textline id="2">
<text>
</text>
</textline>
<textline id="3">
<text>M</text>
<text>e</text>
</textline>
</page>"""
from bs4 import BeautifulSoup
parsed_xml = BeautifulSoup(xml, 'xml')
text_lines = []
for tag in parsed_xml.find_all("textline"):
tag.string = ''
text_lines.append(tag)
print(text_lines)
[<textline id="1"></textline>,
<textline id="2"></textline>,
<textline id="3"></textline>]
[,,
,
]
我知道我最初将这个问题标记为beautifulsoup
,但我只想分享我最终实际使用的内容。@Rakesh的解决方案确实适用于beaufitulsoup
实际上,我最终使用了Python内置的XML解析器:
import xml.etree.ElementTree as ET
tree = ET.parse(path_to_xml_file)
root = tree.getroot()
for textline in root.iter('textline'):
print(textline)
我认为这是一个更干净的解决方案,所以希望这能帮助任何人看到这篇文章。你的预期结果是什么?如果你不介意生孩子,你可以试着数一数
textline
标签。你期望的输出是什么?嗨,两个-刚刚用预期的结果更新了我的原始帖子。我认为BeautifulSoup无法打开文件-它需要带有html/xml的文本,而不是文件名。或者您必须使用open()
-BeautifulSoup(open('myXMLfile.xml'),'xml')
-请参阅