【问题标题】:Find xml attribute values in a SOAP response with javascript使用 javascript 在 SOAP 响应中查找 xml 属性值
【发布时间】:2021-06-23 02:29:34
【问题描述】:

我正在开发一个 Outlook Web 加载项,我使用 GetItem 从 Exchange Web 服务 SOAP 响应中获取 ChangeKey,这是我编写进一步请求时需要的值。问题是到目前为止我还没有得到那个。我关注Find xml attribute values with javascript 没有成功。 我不确定我是否能够使用其他外部库,因为它托管在 office365 环境中。

这就是我一直在尝试做的事情

var responseXML = 
'<?xml version="1.0" encoding="utf-8"?>'+
' <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">'+
'   <s:Header>'+
'       <h:ServerVersionInfo MajorVersion="15" MinorVersion="20" MajorBuildNumber="3955" MinorBuildNumber="27" Version="V2018_01_08" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'+
'   </s:Header>'+
'   <s:Body>'+
'       <m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">'+
'           <m:ResponseMessages>'+
'               <m:GetItemResponseMessage ResponseClass="Success">'+
'                   <m:ResponseCode>NoError</m:ResponseCode>'+
'                   <m:Items>'+
'                       <t:Message>'+
'                           <t:ItemId Id="AAMkADZh" ChangeKey="CQABA"/>'+
'                           <t:Subject>the email subject</t:Subject>'+
'                       </t:Message>'+
'                   </m:Items>'+
'               </m:GetItemResponseMessage>'+
'           </m:ResponseMessages>'+
'       </m:GetItemResponse>'+
'   </s:Body>'+
'</s:Envelope>';

xmlDoc = $.parseXML(responseXML),
$xml = $(xmlDoc),
$itemId = $xml.find("ItemId");
$itemId.each(function(index, element) { 
    if(element.attributes["ChangeKey"]) {
        console.log("ChangeKey :" + element.attributes["ChangeKey"].value);
    }
});

但是$itemId 不返回集合,虽然我只期待一个项目,但我认为准备好迭代并没有什么坏处。

https://jsbin.com/matagujeye/1/edit?js,console

【问题讨论】:

    标签: javascript xml-parsing exchangewebservices


    【解决方案1】:

    我发现 here 我应该包含名称空间并双重转义冒号。

    所以下面的代码有效:

    var responseXML = 
    '<?xml version="1.0" encoding="utf-8"?>'+
    ' <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">'+
    '   <s:Header>'+
    '       <h:ServerVersionInfo MajorVersion="15" MinorVersion="20" MajorBuildNumber="3955" MinorBuildNumber="27" Version="V2018_01_08" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'+
    '   </s:Header>'+
    '   <s:Body>'+
    '       <m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">'+
    '           <m:ResponseMessages>'+
    '               <m:GetItemResponseMessage ResponseClass="Success">'+
    '                   <m:ResponseCode>NoError</m:ResponseCode>'+
    '                   <m:Items>'+
    '                       <t:Message>'+
    '                           <t:ItemId Id="AAMkADZh" ChangeKey="CQABA"/>'+
    '                           <t:Subject>the email subject</t:Subject>'+
    '                       </t:Message>'+
    '                   </m:Items>'+
    '               </m:GetItemResponseMessage>'+
    '           </m:ResponseMessages>'+
    '       </m:GetItemResponse>'+
    '   </s:Body>'+
    '</s:Envelope>';
    
    xmlDoc = $.parseXML(responseXML),
    $xml = $(xmlDoc),
    $itemId = $xml.find("t\\:ItemId");
    $itemId.each(function(index, element) { 
        if(element.attributes["ChangeKey"]) {
            console.log("ChangeKey :" + element.attributes["ChangeKey"].value);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多