在通知Worklight适配器中 - 我调用适配器从后端服务传递一个非常长的XML字符串。
后端服务无法更改或更改。
我希望能够将javascript String对象转换为我可以解析的内容并使用有用的函数,例如:
var custNum = doc.getElementsByTagName("data:custNum")[0];
然而,到目前为止,创建'doc'变量的所有尝试都失败了。标准DOMParser和窗口方法未定义,并且在适配器中超出范围。我宁愿不使用冗长的字符串拆分来找到我的节点!
非常感谢
答案 0 :(得分:2)
设置returnedContentType:“xml”。 这将迫使WL平台自动为您解析XML并将其转换为您可以操作的JSON。
E.g。
<a>
<b>
c
</b>
</a>
将转换为
{"a":
{"b":"c"}
}
所以你可以使用像response.a.b
这样的语法来获取值答案 1 :(得分:1)
你应该使用XSL Transformation Filtering来清除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 Worklight(http://www.ibm.com/developerworks/mobile/worklight/getting-started.html)module 5.2 - Creating HTTP Adapters(ftp://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v505/Module_05_2_-_Creating_HTTP_Adapters.pdf)及其exercise and code sample(ftp://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v505/module_05_2_HTTP_Adapter.zip)。
答案 2 :(得分: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;
}
我使用的 - 简单明了。