Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python minidom不读取\\n行末尾的换行符_Python_Xml_Newline_Minidom - Fatal编程技术网

Python minidom不读取\\n行末尾的换行符

Python minidom不读取\\n行末尾的换行符,python,xml,newline,minidom,Python,Xml,Newline,Minidom,我使用minidom解析器来读取xml。我面临的问题是,当它读取完行时,它并没有读取行尾字符。例如,我的xml文件类似于: <?xml version="1.0" ?><ItemGroup> <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">setlocal C:\Tools\CMake2.8\bin\cmake.exe C:/tb/Source/../</C

我使用minidom解析器来读取xml。我面临的问题是,当它读取完行时,它并没有读取行尾字符。例如,我的xml文件类似于:

<?xml version="1.0" ?><ItemGroup>
      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">setlocal
C:\Tools\CMake2.8\bin\cmake.exe C:/tb/Source/../</Command>
</ItemGroup>
请忽略/指出任何缩进错误 现在,尽管setlocal和C:\Tools\CMake2.8\bin\cmake.exe在xml文件中有一个换行符,但我的代码无法读取它,我不知道为什么。有人能帮忙吗

更新:
我正在尝试将拆分为['setlocal','C:\Tools\CMake2.8\bin\cmake.exe','C:/tb/Source/./']

而不是将文本值拆分为空格“”,您希望将其拆分为所有空白,因为这些看起来像命令行,所以应该使用适当的解析器拆分它们。您要更改:

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

这将为您提供:

['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

另一种可能性是,考虑独立于 使用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 这不是你的目标

编辑: 我注意到你的评论说你真的想在你的 列表,我还要说检查\n是多余的,因为 当然,所有空格也将行分隔符视为空格

'a\nb'.split()
给予


我使用索引是因为我想按顺序遍历列表。同时检查“\n”在我的情况下也不起作用。我已经试过了。但是谢谢你的帮助。你是如何在一段时间内处理文本的?其中第一行是setlocal,第二行是C:\Tools\CMake2.8\bin\cmake.exe C:/tb/Source/./。或者更好的说法是:您希望从中解析文本后的结果是什么样的?是否尝试拆分为['setlocal','C:\\Tools\\CMake2.8\bin\\cmake.exe','C:/tb/Source/./']?是。我正在尝试将拆分为['setlocal','C:\\Tools\\CMake2.8\bin\\cmake.exe','C:/tb/Source/./']您的问题解决了吗?
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.'
'a\nb'.split()
['a', 'b']