0

我已經開始使用Appcelerator在Windows Phone上進行開發。我正在使用我的Android代碼作爲基礎,同時我正在面對XML解析的特定問題。這是XML字符串:Appcelerator Windows Phone XML解析錯誤

<returnXml> 
    <methodStatus> 
     <statusType>success</statusType> 
    </methodStatus> 
    <parametersReturn /> 
</returnXml> 

這是我試圖運行代碼:

var xml = Ti.XML.parseString(xmlString); 
var statusType = xml.evaluate("/returnXml/methodStatus/statusType").item(0).text; 

上面的代碼適用於Android精品,但Windows Phone上我得到:

TypeError: xml.evaluate is not a function

於是,我就用下面的代碼來代替:

getElementsByTagName("statusType")

但似乎Windows電話不支持這些功能,或者我在這裏犯了一些錯誤。我應該做其他事情還是應該尋找JavaScript的外部XML解析器庫?如果是這樣,請指導。

回答

1

我們應該支持Ti.XML.Document.evaluate函數(和getElementsByName)。要查看圍繞Ti.XML API的單元測試,您可以看看:https://github.com/appcelerator/titanium_mobile_windows/blob/master/Examples/NMocha/src/Assets/ti.xml.test.js

可能我們沒有測試XPath的變體或您正在使用的API。如果是這樣,也許我們在那裏測試的一些可以幫助你臨時解決這個問題,直到我們能夠解決什麼問題?您可以在JIRA中提供buh報告,並提供您使用的SDK版本的詳細信息:https://jira.appcelerator.org/secure/CreateIssue!default.jspa

現在,我創建了一個新的單元測試PR,嘗試重新創建問題:https://github.com/appcelerator/titanium_mobile_windows/pull/575很高興知道您是否有改進測試的建議。

我可以說,你的代碼段應在失敗嘗試,因爲物業爲獲得「文本」訪問文本值的textContent,所以它會是:

var statusType = xml.evaluate("/returnXml/methodStatus/statusType").item(0).textContent; 

http://docs.appcelerator.com/platform/latest/#!/api/Titanium.XML.Node-property-textContent

雖然你可能只是做這一切在XPath表達式一個鏡頭:

var statusType = xml.evaluate("/returnXml/methodStatus/statusType[1]/text()"); 
+0

謝謝,這個問題是,DOM Level 3的API尚未對Windows Phone的實現爲報道PR。是的,** getElementsByTagName **通過使用_textContent_而不是_text_來工作。解決方法是使用** getElementsByTagName **,但是我如何實現它以類似於xPath表達式,因爲我有多個要評估的路徑節點。當我必須訪問路徑中的特定節點時,主要問題纔會到來,但其他路徑中也可能存在類似的節點。即如何區分'/ path1/methodStatus/statusType'和'/ path2/otherStatus/statusType'中的statusType節點? –

+0

好吧,它不漂亮,但你可以做getElementsByTagName(「statusType」),然後遍歷結果並檢查每個節點的node.parentNode.tagName,以驗證它是你想要的。 –