[英]minidom doesn't read \\n newline character at the end of line
我正在使用 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>
我的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'
#}
#}
#}
(請忽略/指出任何縮進錯誤)
現在即使setlocal
和C:\Tools\CMake2.8\bin\cmake.exe
在 xml 文件中它們之間有一個換行符,我的代碼也無法讀取它,我不知道為什么。 有人可以幫忙嗎?
更新:我正在嘗試將<Command>
拆分為 ['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'
至:
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
另一種可能性,考慮獨立於特定操作系統的行分隔符,可能如下,使用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
是多余的,因為按所有空格分割當然也將行分隔符視為空格。
'a\nb'.split()
給
['a', 'b']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.