I'm working on an outlook web add-in, I use GetItem to get the ChangeKey from the Exchange Web Service SOAP response, a value I need to compose further requests. The problem is that so far I haven't been able to get that. I have followed Find xml attribute values with javascript without success. I'm not sure I'm able to use other external libraries since this is hosted in an office365 environment.
This is what I have been trying to do
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);
}
});
but $itemId
does not return a collection, although I'm expecting only one item, i think it doesn't hurt to leave the iteration prepared.
I found out here that I should include the name space and double escape the colons.
So the following code works:
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);
}
});