2013-03-11 63 views
0

在通知中Worklight適配器 - 我調用適配器從後端服務傳遞非常長的XML字符串。在Worklight適配器中解析XML的方法是什麼?

後端服務無法更改或更改。

我希望能夠把JavaScript字符串對象到的東西我可以分析和如使用有用的功能:

var custNum = doc.getElementsByTagName("data:custNum")[0]; 

但所有嘗試到目前爲止創造了「DOC」變量都失敗了。標準DOMParser和窗口方法未定義,並且在適配器中超出了範圍。我寧願不訴諸冗長的字符串分裂來找到我的節點!

非常感謝

+1

看來你想要的東西像[JSPath](https://github.com/dfilatov/jspath)。嘗試將其添加到您的適配器並使用它來解析JSON響應。還有[XPath](http://www.w3schools.com/xpath/)用於導航XML。我沒有嘗試過,因此這只是評論,並不是一個答案。請記住,Adapters中的JavaScript使用[Mozilla Rhino](https://developer.mozilla.org/en-US/docs/Rhino)在服務器上運行,而不是在客戶端操作系統上運行(這就是爲什麼您沒有窗口對象,DOM或客戶端庫)。 – cnandreu 2013-03-12 00:44:28

+0

非常感謝您的回覆! – RenegadeAndy 2013-03-12 10:37:28

+0

我到底該如何將其添加到適配器 - 您沒有機會將多個JS文件添加到適配器中。 – RenegadeAndy 2013-03-14 15:08:09

回答

0

最後我寫了這樣的功能:

function findNode(node,string){ 

    var nodeEnd = node.slice(0, 1) + "/" + node.slice(1); 
    var chunk = string.split(node)[1]; 
    var chunk2 = chunk.split(nodeEnd)[0]; 

    return chunk2; 

} 

我使用 - 簡單好用。

2

設置returnedContentType:「xml」。 這將迫使WL平臺自動爲您解析XML並將其轉換爲您可以操作的JSON。

E.g.

<a> 
    <b> 
    c 
    </b> 
</a> 

將被轉換爲

{"a": 
    {"b":"c"} 
} 

這樣你就可以得到的語法類似值response.ab

+0

所以,如果這是一個通知適配器 - 我怎麼說/它在哪裏說它的XML。這個XML是從HTTPSerlvetRequest的主體手動檢索的。 – RenegadeAndy 2013-03-12 10:36:33

1



您應該使用XSL轉換過濾得到來自擺脫所有不需要的數據XML。
這樣的事情應該是你的適配器的JavaScript函數:

function getFeedsFiltered() { 

    var input = { 
     method : 'get', 
     returnedContentType : 'xml', 
     path : "rss.xml", 
     transformation : { 
      type : 'xslFile', 
      xslFile : 'filtered.xsl' 
     } 
    }; 

    return WL.Server.invokeHttp(input); 
} 

和這樣的事情應該是你的XSL文件

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:h="http://www.w3.org/1999/xhtml" 
       xmlns:dc="http://purl.org/dc/elements/1.1/" > 
    <xsl:output method="text"/> 

    <xsl:template match="/"> 
     { 
      'Items': [ 
       <xsl:for-each select="//item"> 
        { 
         'title': '<xsl:value-of select="title"/>', 
         'creator': '<xsl:value-of select="dc:creator"/>', 
         'link': '<xsl:value-of select="link"/>', 
         'pubDate': '<xsl:value-of select="pubDate"/>' 
        }, 
       </xsl:for-each> 
      ] 
     } 
    </xsl:template> 

</xsl:stylesheet> 

請檢查Getting started with IBM Worklighthttp://www.ibm.com/developerworks/mobile/worklight/getting-started.htmlmodule 5.2 - Creating HTTP Adaptersftp://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v505/Module_05_2_-_Creating_HTTP_Adapters.pdf)及其exercise and code sampleftp://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v505/module_05_2_HTTP_Adapter.zip )。

+0

它是一個通知適配器 - 所以我從後端調用它 - 與此相反...... – RenegadeAndy 2013-03-13 13:24:07

相關問題