Python minidom不读取\\n行末尾的换行符
我使用minidom解析器来读取xml。我面临的问题是,当它读取完行时,它并没有读取行尾字符。例如,我的xml文件类似于: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
<?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']