<p>也可以使用<code>xml.etree.ElementTree</code>来解析<code>XML</code>内容。在</p>
<p>此代码将:</p>
<ol>
<li>使用XML内容创建<code>soup</code></li>
<li>搜索所有出现的<code><CHANNEL></CHANNEL></code>标记</li>
<li>对于每次出现的<code><CHANNEL></code>,它将在<code><COMMENT></code>标记中搜索单词{<cd7>}。在</li>
<li>如果找到单词<code>'ROTARY'</code>,它将在<code><SIGNALNAME></code>标记处打印值。在</li>
</ol>
<p><strong>示例代码:</strong></p>
<pre><code>s = '''<PROJECT>
<HARDWARE CONFIGURATION>
<PNIODEVICE>
<PNIOSLOT>
<CHANNEL>
<INDEX>2</INDEX>
<SUBADR>0</SUBADR>
<CHTYPE>E</CHTYPE>
<MASK>4</MASK>
<SIGNALNAME>ELE+S1-BGI51.2</SIGNALNAME>
<COMMENT>ROTARY TRANSFER RADIAL ALIGNMENT 00SWIV</COMMENT>
</CHANNEL>
<CHANNEL>
<INDEX>3</INDEX>
<SUBADR>0</SUBADR>
<CHTYPE>E</CHTYPE>
<MASK>8</MASK>
<SIGNALNAME>ELE+S1-BGI51.3</SIGNALNAME>
<COMMENT>ROTARY TRANSFER RADIAL ALIGNMENT 1800SW</COMMENT>
</CHANNEL>
<CHANNEL>
<INDEX>4</INDEX>
<SUBADR>0</SUBADR>
<CHTYPE>E</CHTYPE>
<MASK>10</MASK>
<SIGNALNAME>ELE+S1-BGI51.4_4C</SIGNALNAME>
<COMMENT>ROTARY TRANSFER TRANSPORT ARM RIGHT 00R</COMMENT>
</CHANNEL>
</PNIOSLOT>
</PNIODEV>
</HARDWARE>
</PROJECT>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(s, 'lxml')
channel_tags = soup.find_all('channel')
for channel in channel_tags:
if 'ROTARY' in channel.comment.text:
print(channel.signalname)
</code></pre>
<p><strong>输出:</strong></p>
^{pr2}$
<hr/>
<p><strong>编辑:</strong></p>
<p>可以使用<code>try/except</code>语句绕过<code>AttributeError</code>。在</p>
<pre><code>for channel in channel_tags:
try:
if 'ROTARY' in channel.comment.text:
print(channel.signalname)
except:
continue
</code></pre>