使用普通javascript从URL解析XML

时间:2014-04-02 11:05:25

标签: javascript html xml sharepoint

我正在尝试使用我们存储在内部Sharepoint列表中的数据创建一个图表(带有amCharts)。

幸运的是,可以通过RESTful URL查询将这些列表转换为XML格式。 这些查询如下所示:

https://sharepoint/_vti_bin/owssvr.dll?Cmd=Display&List=%7B812FC713-F916-4284-B50F-2EC3B8E80C98%7D&View=%7BAAFAA130-33B1-4A21-9E98-C25FECEF79E4%7D&XMLDATA=TRUE?Cmd=Display&List=%7B812FC713-F916-4284-B50F-2EC3B8E80C98%7D&View=%7BAAFAA130-33B1-4A21-9E98-C25FECEF79E4%7D&XMLDATA=TRUE

生成的XML数据虽然没有标准的header / mime-type /等,但是就像这样:

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
 xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
 xmlns:rs='urn:schemas-microsoft-com:rowset'
 xmlns:z='#RowsetSchema'>

<s:Schema id='RowsetSchema'>
...
</s:Schema>

<rs:data>
...
</rs:data>

</xml>

现在我需要做的是为了转换和使用javascript中的数据,这样我最终可以将它插入到图表中,就是能够在我的Web应用程序中解析它(html / php / plain js) )。

通常情况下我会在这种情况下执行xmlhttprequest(),但是,我已经尝试了这个并且它让我失望了。看起来它不能使用URL作为xml源。不幸的是,没有任何错误消息...

这是我使用的功能(包括调试警报):

<script type="text/javascript"> 
function loadXMLDoc(XMLname)
{
alert("Function loaded");
var xmlDoc;
if (window.XMLHttpRequest)
{
alert("Chrome, getting XML");
xmlDoc=new window.XMLHttpRequest();
xmlDoc.open("GET",XMLname,false);
xmlDoc.send("");
alert("Chrome, got XML");
return xmlDoc.responseXML;
}
// IE 5 and IE 6
else if (ActiveXObject("Microsoft.XMLDOM"))
{
alert("IE, getting XML");
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load(XMLname);
alert("IE, got XML");
return xmlDoc;
}
alert("Error loading document!");
return null;
}
</script>

该功能正确加载,然后正确选择Chrome / Firefox路径并开始通过&#34; GET&#34;查询。

此查询无法通过和

返回结果或错误消息
alert("Chrome, got XML");

永远不会到达。

有没有人知道为什么没有错误消息或如何用javascript实际解析XML URL?

最好的问候

daZza

1 个答案:

答案 0 :(得分:1)

我假设您使用的是SharePoint 2010.目前尚不清楚为什么要使用SharePoint Foundation RPC Protocol方法来访问SharePoint列表数据。

RPC外,SharePoint 2010还支持RESTJSOMSOAP Services

以下示例演示了如何使用SharePoint 2010 REST API读取列表项:

function getListItems(webUrl,listName, success, failure) {
    var url = webUrl + "/_vti_bin/listdata.svc/" + listName;
    $.ajax({
        url: url,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            success(data.d.results);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}


//Usage
getListItems('https://contoso.sharepoint.com/project/','Tasks',function(taskItems){
    console.log(taskItems); 
    for(var i = 0; i < taskItems.length;i++) {
        console.log(taskItems[i].TaskName);
    }
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

参考