在Worklight Adapter中解析XML的方法是什么?

时间:2013-03-11 23:07:55

标签: javascript dom xml-parsing ibm-mobilefirst

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

后端服务无法更改或更改。

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

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

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

非常感谢

3 个答案:

答案 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 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)。

答案 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;

}

我使用的 - 简单明了。