Javascript 在Worklight适配器中解析XML的方法是什么?

Javascript 在Worklight适配器中解析XML的方法是什么?,javascript,dom,xml-parsing,ibm-mobilefirst,Javascript,Dom,Xml Parsing,Ibm Mobilefirst,在通知Worklight适配器中-我调用适配器,从后端服务传递一个很长的XML字符串 无法更改或更改后端服务 我希望能够将javascript字符串对象转换为我可以解析并使用有用函数的对象,例如: var custNum = doc.getElementsByTagName("data:custNum")[0]; 但是,到目前为止,所有创建“doc”变量的尝试都失败了。适配器中的标准DOMParser和window方法未定义且超出范围。我宁愿不诉诸冗长的字符串拆分来找到我的节点 非常感谢设置r

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

无法更改或更改后端服务

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

var custNum = doc.getElementsByTagName("data:custNum")[0];
但是,到目前为止,所有创建“doc”变量的尝试都失败了。适配器中的标准DOMParser和window方法未定义且超出范围。我宁愿不诉诸冗长的字符串拆分来找到我的节点

非常感谢

设置returnedContentType:“xml”。 这将迫使WL平台自动为您解析XML,并将其转换为您可以操作的JSON

例如

因此,您可以使用response.a.b等语法获取值。 这将迫使WL平台自动为您解析XML,并将其转换为您可以操作的JSON

例如


因此,您可以使用诸如response之类的语法获取值。a.b



您应该使用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>

{
“项目”:[
{
“标题”:“,
“创造者”:“,
“链接”:“,
“发布日期”:”
},
]
}

请检查()()及其()。



您应该使用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>

{
“项目”:[
{
“标题”:“,
“创造者”:“,
“链接”:“,
“发布日期”:”
},
]
}

请检查()及其()。

最后,我编写了一个如下函数:

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;

}

我使用的函数很好,很简单。

最后我编写了一个如下函数:

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;

}

我用的是——漂亮而简单。

看起来你想要这样的东西。尝试将其添加到适配器中,并使用它解析JSON响应。还有一个用于导航XML的方法。我还没有试过,所以这只是一个评论,不是一个答案。请记住,适配器中的JavaScript使用在服务器上运行,而不是在客户端操作系统上运行(这就是为什么您没有窗口对象、DOM或客户端库的原因)。非常感谢您的回复!我该如何将其添加到适配器中?您没有机会将多个JS文件添加到适配器中。您可以将JavaScript代码复制/粘贴到
[adapter name]-impl.JS
文件中。似乎您需要类似的内容。尝试将其添加到适配器中,并使用它解析JSON响应。还有一个用于导航XML的方法。我还没有试过,所以这只是一个评论,不是一个答案。请记住,适配器中的JavaScript使用在服务器上运行,而不是在客户端操作系统上运行(这就是为什么您没有窗口对象、DOM或客户端库的原因)。非常感谢您的回复!我该如何将其添加到适配器中?您没有机会将多个JS文件添加到适配器中。您可以将JavaScript代码复制/粘贴到
[adapter name]-impl.JS
文件中。因此,如果这是一个通知适配器-如何/在何处说出其xml。这个XML是从HTTPSerlvetRequest的主体中手动检索的。此XML是从HTTPSerlvetRequest的主体中手动检索的。它是一个通知适配器-因此我从后端调用它-与此相反…它是一个通知适配器-因此我从后端调用它-与此相反。。。