2013-09-25 48 views
1

我有一個需要將「TAB」字符作爲鍵值的XML文件。基於這個鏈接Represent space and tab in XML tag我編碼爲&#009,而不是使用「\ t」,因爲它將它解釋爲包含兩個字符'\'和't'的字符串。當XML具有特殊字符時使用Python minidom進行XML解析

我沒有使用CDATA部分爲依然會考慮TAB爲包含兩個字符「\」和「T」

我用例的樣本XML文件看起來像這樣

<?xml version="1.0" encoding="UTF-8"?> 
<keys> 
    <key> 
     <name>key1</name> 
     <value>value1</value> 
    </key> 
    <key> 
     <name>key2</name> 
     <value>&#009;</value>                  
    </key> 
    <key> 
     <name>key3</name> 
     <value>2048</value> 
    </key> 
</keys> 
字符串

這是代碼,我現在是不是能夠處理這個製表符

... 
dom_obj = minidom.parse(self.path_to_xml) 
... 
for each_key_child in key_child: 
    if each_key_child.nodeType == Node.ELEMENT_NODE: 
     if each_key_child.nodeName == 'name': 
      node_name = str(each_key_child.childNodes[0].data.strip()) 
     elif each_key_child.nodeName == 'value': 
      node_value = str(each_key_child.childNodes[0].data.strip()) 
     else: 
      pass 
    else: 
     pass 

執行我的腳本後得到的輸出爲

'key1': 'value1', 
'key2': '', 
'key3': '2048', 

但是,當我執行它的Python解釋

mobj = minidom.parse(path_to_xml_file) 
mobj.getElementsByTagName("value")[1].childNodes[0] 

我得到以下輸出

<DOM Text node "u'\t'"> 

但我不能夠輸出分配給一個變量。這一步是不工作

node = mobj.getElementsByTagName("value")[1].childNodes[0].data 

但另一個奇怪的是,當我只是說在解釋節點正在打印「\ t」!

node 
u'\t' 

要查看是否是這樣的,其中製表符漸漸存儲在變量,但沒有得到顯示我用它作爲分隔符來連接兩個字符串的真正情況。

也能正常工作的解釋,但不是在它的輸出我在VIM上看到劇本:設置列表選項

誰能告訴我什麼是錯的我採取的方法。幫助讚賞!

+0

謝謝@PeterDeGlopper – rgk

回答

3

你在致電strip()。這剝去了標籤。只是不要那樣做。 (或者,如果您需要剝去空格或換行符或具體的事情,但留下的標籤,與特定的參數調用它,就像strip('\n')。)

這裏有一個演示(僞造的,因爲你的示例XML是無效的,所以我無法測試它):

>>> mobj.getElementsByTagName("value")[1].childNodes[0] 
<DOM Text node "u'\t'"> 
>>> mobj.getElementsByTagName("value")[1].childNodes[0].data 
u'\t' 
>>> mobj.getElementsByTagName("value")[1].childNodes[0].data.strip() 
u'' 
>>> mobj.getElementsByTagName("value")[1].childNodes[0].data.strip('\n') 
u'\t' 
+0

我應該看到這個謝謝abamert。在這個愚蠢的事情上浪費了一個小時 – rgk