1

我完全停留在从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>
...

因为我知道我需要 property 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']")

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

提前致谢!马丁

4

1 回答 1

1

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

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

修订 1: 鉴于您的反馈是返回了一个附加元素(语音字段),这里是一个修改后的选择器,仅返回包含 FirstName 元素的选择器:

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

保罗

于 2012-11-09T00:54:20.923 回答