从xml中每个</p> <article>的多个<p>标记中删除文本

时间:2018-11-29 05:59:50

标签: xml python-3.x

我正在为一个大型的xml文件而苦苦挣扎,该文件的根目录为“ articles”,并且在“ article>”标签下包含许多单独的文章。我希望为“文章”中的每个“文章”收集“ p”标签内的所有文本。一个“文章”可以具有多个“ p”标签,如下所示:

<articles>
    <article title="Blah" published-at="2018-01-01" id="00000">
      <p>Here is some text.</p>
      <p>Another line of text.</p>
      <a type="external" href="https://www.website.com/">Image</a>
      <p>Final line of text.</p>
    </article>
    <article title="Second blah" published-at="2018-01-02" id="00001">
      <p>Here is some new text.</p>
      <p>Final line of new text.</p>
    </article>
</articles>

所以我想做的是遍历每篇文章,并生成一行包含'p'标记中所有文本的行,而不关心如果我在'a'标记中拾取了链接和相关文本。

我希望这样的方法可以工作,但是它产生的文本文件没有被每个“文章”分开

text = []

for p in root.iter('p'):
  text.append(p.text)
  with open("text.txt", "w", encoding = 'utf-8') as output:
    output.write(str(text))

我们将诚挚地感谢您的帮助,因为这对我来说很难在搜索中表达。

1 个答案:

答案 0 :(得分:0)

Python拥有xml.etree.ElementTree库(除其他外),用于处理XML,您可以使用它进行以下操作:

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()

text = []
for article in root.findall('article'):
    for paragraph in article.findall('p'):
        text.append(paragraph.text)
        paragraph.text = ''

tree.write('output.xml')