从$(xData.responseXML)对象中检索特定节点

时间:2012-11-08 21:53:41

标签: sharepoint jquery-selectors spservices

我完全停留在从GetUserProfileByName(SharePoint / SPServices)返回的responseXML对象中检索特定节点。我需要一个特定的PropertyData节点(在示例中为“FirstName”),然后检索“FirstName”的值。检索值不是问题,检索特定节点是......

在返回的XML的一部分下面(为了示例我剥离了一些属性):

...
<PropertyData>
   <Name>UserProfile_GUID</Name>
   <Values>
     <ValueData>
       <Value xmlns:q1="...">206b47c7-cfdc-...</Value>
     </ValueData>
   </Values>
</PropertyData>
<PropertyData>
   <Name>FirstName</Name>
   <Values>
     <ValueData>
       <Value xsi:type="xsd:string">Maarten</Value>
     </ValueData>
   </Values>
</PropertyData>
...

因为我知道我需要属性FirstName,所以我不想遍历整个PropertyData节点集,直到我找到正确的节点(慢)。在XPath中,我可以通过以下方式选择FirstName

//PropertyData[Name='FirstName']/Values/ValueData/Value

但是,我无法在xData.responseXML对象中执行此操作。我尝试了以下过滤器,查找和其他内容(各种变体):

$(xData.responseXML).SPFilterNode("PropertyData").find("[Name*=FirstName]")

$(xData.responseXML).SPFilterNode("PropertyData").find("[Name*='FirstName']")

$(xData.responseXML).SPFilterNode("PropertyData").filter("[Name*=FirstName]")

$(xData.responseXML).SPFilterNode("PropertyData[Name='FirstName']")

我做了很多搜索,但无法找到答案。有许多部分答案,我都试过,但没有工作。任何一个线索......

提前致谢! 马腾

1 个答案:

答案 0 :(得分:1)

@Maarten 我现在不在我的电脑上进行测试,但试试这个:

$(xData.responseXML).find("Name:contains('FirstName')").closest("PropertyData")

修订1: 鉴于您的反馈是返回了一个额外的元素(语音字段),这里是一个修订的选择器,只返回包含FirstName元素的那个:

$(xData.responseXML)
     .find("Name:contains('FirstName')")
     .not(":contains('SPS-PhoneticFirstName')")
     .closest("PropertyData");
保罗