Python XML Minidom在子节点中按标记获取元素

6 python xml minidom

我正在努力研究IRC Bot并希望从XML文件中检索配置,如下所示:

<server>
  <host> HOST1 </host>
  <port> 6667 </port>
  <channel>
    <name> CHANNAME1</name>
  </channel>
  <channel>
    <name> CHANNAME2 </name>
  </channel>
</server>
<server>
  <host> HOST2 </host>
  <port> 6667 </port>
  <channel>
    <name> CHANNAME3 </name>
  </channel>
</server>
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

doc = minidom.parse(xml)
node = doc.documentElement
servers = doc.getElementsByTagName("server")

for server in servers:

    channels = server.getElementsByTagName("channel")
    host = server.getElementsByTagName("host")[0].childNodes[0].data
    print host

    for channel in channels:
        NAME = channel.getElementsByTagName("name")[0].childNode[0].data
        print NAME
Run Code Online (Sandbox Code Playgroud)

输出是

HOST1
CHANNAME1
CHANNAME2
CHANNAME3
HOST2
CHANNAME1
CHANNAME2
CHANNAME3
Run Code Online (Sandbox Code Playgroud)

但我所需要的只是

HOST1
CHANNAME1
CHANNAME2
HOST2
CHANNAME3
Run Code Online (Sandbox Code Playgroud)

有没有办法在我的节点服务器而不是整个xml文件中获取标签名称为"channel"的所有元素?

Jam*_*ess 5

您的代码看起来是正确的。你有childNode它应该childNodes在的时候NAME作业中的时间,但我假设这只是你问题中的一个拼写错误。

但您的 XML 无效。您需要某种根节点来包裹服务器。正如目前所写的那样,我什至不希望它能成功解析。它应该看起来像这样:

<servers>
  <server>
    <host> HOST1 </host>
    <port> 6667 </port>
    <channel>
      <name> CHANNAME1</name>
    </channel>
    <channel>
      <name> CHANNAME2 </name>
    </channel>
  </server>
  <server>
    <host> HOST2 </host>
    <port> 6667 </port>
    <channel>
      <name> CHANNAME3 </name>
    </channel>
  </server>
</servers>
Run Code Online (Sandbox Code Playgroud)

通过该 XML 以及您提供的代码,我可以获得您期望的确切输出。