Python在同一行中获取xml相同的子节点

时间:2016-09-24 13:23:56

标签: python xml

我有一个xml文件:

<?xml version="1.0" encoding="utf-8"?>
  <SetupConf>
  <LocSetup>
    <Src>
      <Dir>C:\User1\test1</Dir>
      <Dir>C:\User2\log</Dir>
      <Dir>D:\Users\Checkup</Dir>
      <Dir>D:\Work1</Dir>
      <Dir>E:\job1</Dir>
     </Src>
  </LocSetup>
  </SetupConf>

其中<Dir>节点取决于用户输入。在&#34; Dir&#34;节点可能是1,2,5,10 dir结构定义。 我可以使用以下Python代码从xml中提取数据:

from xml.dom import minidom

dom = minidom.parse('Test0001.xml')
Src=dom.getElementsByTagName('Src')

for node in Src:
    alist =node.getElementsByTagName('Dir')
    for a in alist:
        dirtext = a.childNodes[0].nodeValue + ','
        print dirtext

............... 我在多行输出:

C:\User1\test1,
C:\User2\log,
D:\Users\Checkup,
D:\Work1,
E:\job1,

但是我需要单行输出而没有空格并删除最后一个逗号,如:

 C:\User1\test1,C:\User2\log,D:\Users\Checkup,D:\Work1,E:\job1

请帮助我这方面,我已经尝试了很多......可能是通过使用itertools分组或defaultdict。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试存储字符串,因此请使用 str.join

output = ",".join([a.childNodes[0].nodeValue for node in Src for a in node.getElementsByTagName('Dir')])

您可以在打印后添加一个尾随逗号,这样您就不会在每个print dirte,之后打印换行符,但不会为后面的逗号占用,如果您实际上没有帮助想要存储字符串。

输出:

In [1]: from xml.dom import minidom

In [2]: x = r"""<?xml version="1.0" encoding="utf-8"?>
   ...:   <SetupConf>
   ...:   <LocSetup>
   ...:     <Src>
   ...:       <Dir>C:\User1\test1</Dir>
   ...:       <Dir>C:\User2\log</Dir>
   ...:       <Dir>D:\Users\Checkup</Dir>
   ...:       <Dir>D:\Work1</Dir>
   ...:       <Dir>E:\job1</Dir>
   ...:      </Src>
   ...:   </LocSetup>
   ...:   </SetupConf>"""

In [3]: from StringIO import StringIO

In [4]: 

In [4]: dom = minidom.parse(StringIO(x))

In [5]: Src = dom.getElementsByTagName('Src')

In [6]: output = ",".join([a.childNodes[0].nodeValue for node in Src for a in node.getElementsByTagName('Dir')])

In [7]: print(output)
C:\User1\test1,C:\User2\log,D:\Users\Checkup,D:\Work1,E:\job1