使用 root.iter 使用 Python 解析 xml 文件不会列出文本

问题描述 投票:0回答:2

我正在尝试使用Python来解析xml文件。我想识别指定 xml 标签之间出现的文本。

我正在运行的代码是


import xml.etree.ElementTree as ET
tree = ET.parse('020012_doctored.xml')
root = tree.getroot()
for w in root.iter('w'):
    print(w.text)

xml文件如下。这是一个复杂的文件,具有相当松散的结构,它结合了序列和层次结构的元素(为了这个查询的目的,我已经简化了它),但显然有一个“w”标签,应该被代码拾取.

谢谢。

<?xml version="1.0" encoding="UTF-8"?>

<CHAT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://www.talkbank.org/ns/talkbank"
      xsi:schemaLocation="http://www.talkbank.org/ns/talkbank https://talkbank.org/software/talkbank.xsd"
      Media="020012" Mediatypes="audio"
            DesignType="long"
            ActivityType="toyplay"
            GroupType="TD"
      PID="11312/c-00018213-1"
      Version="2.20.0"
      Lang="eng"
      Options="bullets"
      Corpus="xxxx"
      Date="xxxx-xx-xx"
      >
  <Participants>
    <participant
      id="MOT"
    name="Mother"
      role="Mother"
      language="eng"
      sex="female"
    />
  </Participants>
  <comment type="Date">15-APR-1999</comment>
  <u who="INV" uID="u0">
    <w untranscribed="untranscribed">www</w>
    <t type="p"></t>
    <media
      start="7.639"
      end="9.648"
      unit="s"
    />
    <a type="addressee">MOT</a>
  </u>
  <u who="MOT" uID="u1">
    <w untranscribed="untranscribed">www</w>
    <t type="p"></t>
    <media
      start="7.640"
      end="9.455"
      unit="s"
    />
    <a type="addressee">INV</a>
  </u>
  <u who="CHI" uID="u2">
    <w untranscribed="unintelligible">xxx</w>
    <w formType="family-specific">choo_choos<mor type="mor"><mw><pos><c>fam</c></pos><stem>choo_choos</stem></mw><gra type="gra" index="1" head="0" relation="INCROOT"/></mor></w>
    <t type="p"><mor type="mor"><mt type="p"/><gra type="gra" index="2" head="1" relation="PUNCT"/></mor></t>
    <postcode>I</postcode>
    <media
      start="10.987"
      end="12.973"
      unit="s"
    />
    <a type="comments">looking at pictures of trains</a>
  </u>

  </CHAT>

python xml elementtree
2个回答
1
投票

您还可以定义命名空间以供进一步使用并使用

iterfind
:

NS = { 'ww' : 'http://www.talkbank.org/ns/talkbank' }
for w in root.iterfind('.//ww:w',NS):
    print(w.text)

结果将是

www
www
xxx
choo_choos

1
投票

我认为你必须在前面添加名称空间:

for w in root.iter("{http://www.talkbank.org/ns/talkbank}w"):
    print(w.text)

您可能想查看此问题以了解更多类似的命名空间问题。

© www.soinside.com 2019 - 2024. All rights reserved.