2010-10-29 105 views
2

我想用jquery从SharePoint服务(列表)解析xml。 我有XMLHttpRequest对象xData其中包含responseXML属性,它是IXMLDOMDocument2。用jquery解析xml的问题

xData.responseText具有以下值:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<GetListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"><GetListItemsResult> 
<listitems 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'> 
    <rs:data ItemCount="2"> 
     <z:row ows_Title='Bosna i Hercegovina' ows_MetaInfo='1;#' ows__ModerationStatus='0' ows__Level='1' ows_ID='1' ows_owshiddenversion='1' ows_UniqueId='1;#{05EC6AB5-D1C6-4CCE-8B70-5FF7B922AE6A}' ows_FSObjType='1;#0' ows_Created='2010-10-29 15:59:59' ows_FileRef='1;#sites/state/Lists/CountryOfResidence/1_.000' /> 
     <z:row ows_Title='Hrvatska' ows_MetaInfo='2;#' ows__ModerationStatus='0' ows__Level='1' ows_ID='2' ows_owshiddenversion='1' ows_UniqueId='2;#{45FA88C3-17AF-4135-A926-6BE0C878EAAF}' ows_FSObjType='2;#0' ows_Created='2010-10-29 16:02:18' ows_FileRef='2;#sites/state/Lists/CountryOfResidence/2_.000' /> 
    </rs:data> 
    </listitems> 
</GetListItemsResult> 
</GetListItemsResponse> 
</soap:Body> 
</soap:Envelope> 

我用下面的代码:

$(xData.responseXML).find("z:row").each(function() { 
    var liHtml = "" + $(this).attr("ows_Title") + ""; 
    alert(liHtml); 
    $("#tasksUL").append(liHtml); 
    }); 

里面,其实什么都不做。这是因为$(xData.responseXML).find(“z:row”).length是0,只有$(xData.responseXML).find(“*”)的长度不为0(在这种情况下为8)。

所以,我的问题是jQuery的查找功能,它不能识别我有xml节点,我找不到任何人有类似的问题。

回答

1

你需要逃避冒号。 See the docs for more info.

试试这个:

$(xData.responseXML).find("z\\:row") 

另外,我觉得有与之前的jQuery 1.4.3版本冒号的问题,但现在我无法找到问题。如果您仍然遇到问题,并且您使用的是旧版本,请尝试升级。

+0

谢谢,我完全忘了冒号是元字符。 – 2010-10-29 18:59:55

+0

@obrad - 不客气。 :O) – user113716 2010-10-29 19:02:04

1

另外在Safari和Firefox中,这不起作用。你需要使用:

$(xData.responseXML).find("[nodeName=z:row]") 

希望这可以帮助别人 - 花了一段时间坚持下去!