Python3-将每个字符附加到字符串(生成一行)

Python3-将每个字符附加到字符串(生成一行),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

我有一个XML元素,如下所示:

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>
但是,
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')
-请参阅