如何在javascript中使用xpath获取xml中节点的属性值

时间:2015-05-14 10:31:52

标签: sharepoint xpath

您好我正在尝试使用javascript从客户端的sharepoint获取用户配置文件属性。但是我没有在xml中获取节点的值。 如何得到它们。 xml看起来像:

如何使用xpath

获取xml中节点的属性值

在此,我想获取<name>代码<Name>AccountName</Name>之间和名称代码

之间的值

想得到值= abc将是xpath表达式

请帮忙

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <GetUserProfileByNameResponse xmlns="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService">
      <GetUserProfileByNameResult>
        <Pro pertyData>
          <IsPrivacyChanged>false</IsPrivacyChanged>
          <IsValueChanged>false</IsValueChanged>
          <Name>UserProfile_GUID</N ame>
            <Privacy>NotSet</Privacy>
            <Values>
              <ValueData>
                <Value xmlns:q1="http://microsoft.com/wsdl/types/" xsi:type="q1:guid">8ed84415-7330-4857-a7d2- d797d71c439f

                </Value>
              </ValueData>
            </Values>
            </PropertyData>
            <PropertyData>
              <IsPrivacyChanged>false</IsPrivacyChanged>
              <Is ValueChanged>false</IsValueChanged>
                <Name>AccountName</Name>
                <Privacy>NotSet</Privacy>
                <Values>
                  <ValueData>
                    <Value xsi:type="xsd:string">abc

                    </Value>
                  </ValueData>
                </Values>
            </PropertyData>
      </GetUserProfileByNameResult>
    </GetUserProfileByNameResponse>
    </ soap:Body>
</soap:Envelope>

请帮帮我。

2 个答案:

答案 0 :(得分:1)

var propertyData = $(responseXML).find("PropertyData").filter(function(e){
    return $(this).find("Name").text() == "AccountName";
});
var value = propertyData.length > 0 ? propertyData.find('Value').text() : '';

由于您尝试通过SharePoint Web Services检索用户配置文件,我建议使用SPServices library,它在使用JavaScript中的 SharePoint Web Services 时隐藏(几乎)所有错综复杂的内容。以下示例演示了如何使用GetUserProfileByName method检索用户配置文件并处理结果:

function getUserProfile(accountName,completeFn) {
  var userInfo = {};
  $().SPServices({
    AccountName: accountName,  
    operation: 'GetUserProfileByName',
    completefunc: function (xData, Status) {
      $(xData.responseXML).SPFilterNode("PropertyData").each(function() {
        userInfo[$(this).find("Name").text()] = $(this).find("Value").text();
      }); 
      completeFn(userInfo);
    }
  });
}

var loginName = 'i:0#.f|membership|username@contoso.onmicrosoft.com';
getUserProfile(loginName,function(info){
    console.log(info);    
});

答案 1 :(得分:0)

您必须遍历从SPServices返回的xml节点。我编写了一个函数来获取所需的用户配置文件属性。

function getUPValue(x, p) {  
   var thisValue = $(x).SPFilterNode("PropertyData").filter(function() {  
     return $(this).find("Name").text() == p;  
   }).find("Values").text();  
   return thisValue;  
 }  

进一步查询用户属性,您只需要调用如下,

getUPValue(xData.responseXML, "WorkEmail");  

这些文章详细介绍了here