Minidom不'不读取行尾的n换行符



我使用minidom解析器读取xml。我面临的问题是,当它完成阅读行时,它不读取行结束字符。例如我的xml文件是这样的:

<?xml version="1.0" ?><ItemGroup>
      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">setlocal
C:ToolsCMake2.8bincmake.exe C:/tb/Source/../</Command>
</ItemGroup>

,我的python代码看起来像这样:

dom = xml.dom.minidom.parse(fileFullPath)
nodes = dom.getElementsByTagName('Command')
for j in range(len(nodes)):#{
  path = nodes[j].childNodes[0].nodeValue
  if nodeName == 'Command':#{
    pathList = path.split(' ')
    for i in range(len(pathList)):#{
      sPath = pathList[i]
      if sPath.find('\n')!=-1:
        print 'sPath has \n'
    #}
  #}
#}

(请忽略/指出任何缩进错误)
现在即使setlocalC:ToolsCMake2.8bincmake.exe在xml文件中有一个换行符,我的代码也无法读取它,我不知道为什么。有人能帮帮忙吗?

更新:我试图将<Command>拆分为['setlocal', 'C:ToolsCMake2.8bincmake.exe', 'C:/tb/Source/../']

另一种可能性,独立考虑行分隔符对于特定的操作系统,使用in操作符可能如下所示和os.linesep。我还使用'n'(没有转义)尝试了这个代码(反斜杠)而不是os.linesep。两个版本都有效。(因此,我的shell不能运行xml.dom.minidom.parse(...)您可以忽略导入中的一些更改

from xml.dom.minidom import parse
import os
dom = parse(fileFullPath)
nodes = dom.getElementsByTagName('Command')
for node in nodes:
    path = node.childNodes[0].nodeValue
    if node.nodeName == 'Command':
        for path in path.split(' '):
            if os.linesep in path:
                print r'Path contains n or whatever your OS uses.'

我也离开了' '在分裂,因为它似乎有setlocal在你的路径列表这不是你的目标。

编辑:在我注意到你的评论说你实际上希望setlocal在你的列表,我还会说检查n是多余的,因为分裂By all whitespaces当然也将行分隔符视为空白符。

'anb'.split()

['a', 'b']

不是在空格上分割文本值(' '),而是在所有空白上分割文本值,由于这些看起来像命令行,因此应该使用适当的解析器对它们进行分割。您要更改:

pathList = path.split(' ')
for i in range(len(pathList)):#{
  sPath = pathList[i]
  if sPath.find('\n')!=-1:
    print 'sPath has \n'

:

import shlex
pathList = shlex.split(path, posix=False)

这将给你:

['setlocal', 'C:\Tools\CMake2.8\bin\cmake.exe', 'C:/tb/Source/../']
  • 注意:如果你的任何路径包含空格并且没有被正确地引用,它们将被错误地分割。例如,'C:\Program Files'将被分割为['C:\Program', 'Files'],但'"C:\Program Files"'将被分割为['C:\Program Files']

同样,你的代码可以稍微清理一下,因为Python不是C语言,Javascript等。

import xml.dom.minidom
import shlex
dom = xml.dom.minidom.parse(fileFullPath)
nodes = dom.getElementsByTagName('Command')
for node in nodes:
  path = node.childNodes[0].nodeValue
  pathList = shlex.split(path, posix=False)
  print pathList

相关内容

  • 没有找到相关文章

最新更新