0

在通知 Worklight 适配器中 - 我调用从后端服务传递一个非常长的 XML 字符串的适配器。

后端服务不能更改或更改。

我希望能够将 javascript String 对象转换为我可以解析和使用有用函数的东西,例如:

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

然而,到目前为止创建“doc”变量的所有尝试都失败了。标准的 DOMParser 和 window 方法是未定义的,并且超出了适配器的范围。我宁愿不诉诸冗长的字符串拆分来找到我的节点!

非常感谢

4

3 回答 3

2

设置返回的内容类型:“xml”。这将强制 WL 平台自动为您解析 XML 并将其转换为您可以操作的 JSON。

例如

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

将转换为

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

因此您可以使用 response.ab 之类的语法获取值

于 2013-03-12T06:13:16.283 回答
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>

请查看IBM Worklight 入门( http://www.ibm.com/developerworks/mobile/worklight/getting-started.html )模块 5.2 - 创建 HTTP 适配器( ftp://public.dhe.ibm.com/software /mobile-solutions/worklight/docs/v505/Module_05_2_-_Creating_HTTP_Adapters.pdf)及其练习和代码示例ftp://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v505/module_05_2_HTTP_Adapter。邮编)。

于 2013-03-13T05:13:34.407 回答
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;

}

我使用的 - 又好又简单。

于 2013-03-14T17:20:19.970 回答