2013-03-11 65 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

相关问题