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

プロパティが必要であることがわかっているので、正しいノード(遅い)が得られるまでFirstName、ノードのセット全体を反復処理したくありません。PropertyDataXPathでは、次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 に答える