2012-11-08 3 views
1

GetUserProfileByName (SharePoint/SPServices)에서 돌아온 responseXML 객체에서 특정 노드를 가져 오는 작업이 완전히 중단되었습니다. 특정 PropertyData 노드 (예제에서는 "FirstName")가 필요하고 "FirstName"값을 검색합니다.

... 
<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> 
... 

내가 알고 있기 때문에 : 값을 가져 오는 (I 일부 속성을 제거 예제를 위해) 반환 된 XML에서 부품 아래 ... 특정 노드가

를 검색, 문제가되지 않습니다 내가 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

@Maarten 내가 지금 테스트하려면 컴퓨터에서 아니지만,이 시도 :

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

개정 1 : 추가 요소가 반환됩니다 귀하의 의견을 감안합니다 (음성을

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

: 필드), 여기에만 FIRSTNAME 요소를 포함하는 하나를 반환하도록 수정 된 선택이다
+0

Paul,이게 효과가있는 것 같습니다. 나는'FirstName' 요소가 더 있는지 계속 확인합니다. 나는 두 개의 노드를 가지며, 하나는'FirstName'을위한 노드이고, 두 번째 노드는'SPS-PhoneticFirstName' 노드입니다. 하지만 50 노드를 반복하는 것보다 더 잘 살 수 있습니다! – Maarten

+0

나는 소리 나는 분야를 제거하고 FirstName 분야를 포함하는 PropertyData 마디를 돌려 보내기 위하여 동일한 것을 수정했다. –

+0

Paul, 다시 한 번 감사드립니다! 지금은 저를 위해 일하고 있습니다. 그러나 나는 당신의 마지막 개정을 구현하지 않았다. 전달 된 SP 프로필 속성 이름을 검색하는 함수를 작성했습니다. 따라서 어떤 종류의 사용자 정의 속성이 있는지 모르기 때문에 어떤 것도 제외 할 수 없습니다. – Maarten