我完全停留在从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']")
我做了很多搜索,但无法找到答案。有许多部分答案,我都试过,但没有工作。任何一个线索......
提前致谢! 马腾
答案 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");
保罗