2015-06-22 69 views
0

我正在使用someresponse.getBody();存儲我從web服務獲得的XML響應。當我將它傳遞給下面的函數時,它無法使用search()或indexOf()進行分析。兩者都返回10和-1的開始和結束位置。string.search()函數無法從XML響應分析字符串

但是,當我從執行日誌中提取響應的主體並用該值硬編碼該變量時。當我將該值傳遞給相同的函數時,它將按照我的預期進行處理。

這看起來是一個格式問題。任何想法我可以在這裏做什麼? 我只限於使用Javascript或NetSuite API,代碼運行在服務器端。我使用下面的函數調用函數:var xmlCCConnote = getValue('CCConnote',response); var xmlCCConnote = getValue('CCConnote',response); var xmlCCConnote = getValue('CCConnote',response);

function getValue(tag,xmlString){ 
    var value; 
    var tempString; 
    var startTag,endTag; 
    var startPos,endPos; 
    startTag = "<"+tag+">"; 
    endTag = "</"+tag+">"; 
    tempString=xmlString; 
    startPos = tempString.indexOf(startTag) + startTag.length; 
    nlapiLogExecution('DEBUG', 'startPos = ', startPos); 
    endPos = tempString.indexOf(endTag); 
    nlapiLogExecution('DEBUG', 'endPos = ', endPos); 
    value = tempString.slice(startPos,endPos); 
    return value; 
} 
+0

是否沒有合適的XML解析器可用?正如您已經發現的那樣,使用字符串操作來解析XML中的值非常容易出錯。編碼或轉義輸出可能存在問題。我會嘗試獲取輸入字符串的十六進制轉儲,以確保沒有什麼好玩的事情發生。 –

+0

我們確實有使用XPATH解析XML的API,但我仍然在等待NetSuite回答我的問題,因爲它們沒有任何價值。這只是一個臨時解決方案,直到XML API被正確設置。 – user3733716

+0

你不能使用第三方庫?讓人驚訝。在這一點上,我可以推薦的是找到一個複製問題的獨立案例,然後將其發佈到此處。如果你說它在XML被硬編碼時運行,而不是在運行時運行,那麼* something *與輸入是不同的,在試圖修改你的提取函數之前,我會弄清楚這一點。 –

回答

0

我被傳入函數的xmlstring被轉義了。以下問題解決了問題:

startTag = '&lt;'+tag+'&gt;'; 
endTag = '&lt;/'+tag+'&gt;';