Javascript GetUserProfileByName属性不一致

Javascript GetUserProfileByName属性不一致,javascript,active-directory,user-profile,Javascript,Active Directory,User Profile,我只是尝试使用GetUserProfileByName服务从广告中获取用户的一些详细信息。为此,我选择使用javascript。经过一点研究和大量修补,我成功地连接到Web服务并成功地检索到数据 我使用了一个简单的if语句来比较属性的“name”,以获得我想要的特定值 if(xmlDoc.getElementsByTagName("Name")[i].childNodes[0].nodeValue == "Department") { property = xmlDoc.getEleme

我只是尝试使用GetUserProfileByName服务从广告中获取用户的一些详细信息。为此,我选择使用javascript。经过一点研究和大量修补,我成功地连接到Web服务并成功地检索到数据

我使用了一个简单的if语句来比较属性的“name”,以获得我想要的特定值

if(xmlDoc.getElementsByTagName("Name")[i].childNodes[0].nodeValue == "Department")
{
    property = xmlDoc.getElementsByTagName("Value")[i].childNodes[0].nodeValue;
}
在这一点上,我开始注意到一些差异。我似乎没有得到我在比较中指定的属性。例如,如果我指定“部门”,它将返回电子邮件。经过一番努力,我最终决定将所有“Name”和“Value”字段放入两个数组中,不进行任何比较,并将它们相邻显示

for(i = 0; i < 13 ; i++)
{
    description[i] = xmlDoc.getElementsByTagName("Name")[i].childNodes[0].nodeValue;
    elements[i] = xmlDoc.getElementsByTagName("Value")[i].childNodes[0].nodeValue;
}
(i=0;i<13;i++)的

{
description[i]=xmlDoc.getElementsByTagName(“名称”)[i].childNodes[0].nodeValue;
元素[i]=xmlDoc.getElementsByTagName(“值”)[i].childNodes[0].nodeValue;
}
我由此得出的结论是,这两个领域显然不匹配:

用户配置文件\u GUID:65f017dc-b892-4afa-8730-5e8f73aa7b86
账户名称:开普敦\ANEL5
名字:亚伯拉罕
名字:Nel
姓氏: SPS语音姓氏:021#######
首选名称:CRS-信息系统与技术
承包商名称:承包商
工作电话:承包商
部门:ANEL5
标题:CN=Abraham-Nel,OU=Standard,OU=Users,OU=End-User-Services,DC=#####,DC=####
SPS作业标题:####@####.###
经理:开普敦文娱中心裙楼

你知道为什么会这样吗

尝试将整个XML文档解析为字符串的结果:

falsefalseUserProfile_GUIDNotSetb21ec99c-2ad9-40a8-9d45-A3273C92EE5AFALSEFALSECOUNTNAME NOTSCAPETOWN\AHEYNESfalsefalseFirstNameNotSetAshleyfalsefalseSPS拼音首名NOTSFALSeLastNameNOTSHEynesFalseFalseSPS拼音首名NOTSETAShleyHeynes FalseSPS-语音显示名称NotSetFalseWorkPhoneNotSet021 400######falsefalseDepartmentNotSetCRS-信息系统和技术FalseFalseTitleNotSetAssistant Professional Officer FalseSPS作业标题NotSetAssistant ProfessionalOfficerfalsefalseManagerNotSetCAPETOWN\d缺少FalseFalseFalsePersonalSpaceNotSetFalsePictureEurLNotSetFalseFalseUserNameNotSetaHeynesFalseFalseQuickLinksNotSetFalseFalseWebSiteNotSetFalsePublicSiteRedirectNotSetFalseSps虚线NotSetFalseSpokeSpeers NotSetFalseFalseSpresponsibility NotSetFalseFalseFalseSps SipAddRessNotSetFalseSpMySiteUpgradeNotSetFalseSpProxyAddresses NotSetFalseSpHiredAtonetSetFalseSpFalseSpDisplayOrderNotSetFalseSpClaimedNotSetFalseSpClaImprovideNotSetFalseSpClaImproviderTypeNotSetFalseSpSavedCountNameNotSetFalseSpResourceAccountNameNotSetFalseFalseSpObjectExistsNotSetFalsefALSESP主帐户名称NotSetFalseSPS区分名称NotSetCN=Ashley Heynes,OU=开发人员,OU=用户,OU=最终用户服务,DC=##,DC=##,DC=######################FalseCellPhoneNotSetFalseFalseWorkEmailNotSet#########FalseFalseFalseFals构建FalseFalseSPs位置NotSetFalseSPs时区NotSetFalseSPass项目NotSetFalseSPs技能NotSetFalseSPs学校NotSetFalseSPs生日NotSetFalseFalseSPs状态NotSetFalseFalseSPs兴趣NotSetFalseFalseSPs电子邮件选项NotSet


到处搜索,XML结构似乎不适合您所使用的逻辑。XML如下所示:

PropertyData*
    Name
    Values
        ValueData
            Value
我不确定每个元素的基数,但我认为在
xmlDoc.getElementsByTagName('PropertyData')
上迭代,然后在该块中找到
名称和(可能是多个)
元素更安全

var properties = xmlDoc.getElementsByTagName("PropertyData");

for (var i = 0, item; item = properties[i]; ++i) {
    // search for Name and Value inside here
}
更新


它很可能是由
FirstName
的多个值引起的:
Abraham
Nel
Abraham-Nel

返回的XML文档是什么样子的?名称和值在XML本身中是否正确排列?一种可能性是getElementsByTagName()函数没有按标记在文档中的显示顺序返回标记。另一种可能是,与名称元素相比,存在更多或更少的值元素,因此仅通过索引查找时,它们会不同步。我们需要查看XML才能确定。@John:很抱歉,我对SharePoint和web服务等的使用还是比较陌生的。我所做的是使用JavaScript在页面上调用web服务,并将其写入SharePoint网站上的空白网页。这是否会创建一个XML并将其存储在站点的某个位置?我可以指定web服务来返回XML文档吗?当我研究这个问题时,我怀疑有更多的Name元素对元素进行赋值,但我认为它们将被专门用Name元素对Value元素进行索引。在这一点上,我显然错了。@John:我再次检查了我的代码,发现我确实从web服务中得到了一个XML变量。我在Google上做了一些尝试,试图使用var string=xmlNode.xml将整个xml写入屏幕;这似乎返回了很多值元素,而没有返回任何XML格式的值。不管怎样,我把它附加到上面的问题上。上面的方法似乎很有趣。getElementsByTagName(“PropertyData”);似乎返回一个xml变量数组。我目前正试图找出如何在这些xml元素中找到值:
falsefalseFirstNamePublicAbraham
@Carel在我创建的循环中,每个
项都是