在 javascript 的 SOAP 响应中查找 xml 属性值
Find xml attribute values in a SOAP response with javascript
我正在开发 outlook 网络插件,我使用 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 但没有成功。
我不确定我能否使用其他外部库,因为它托管在 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
不是 return 一个集合,虽然我只期待一个项目,但我认为让迭代做好准备并没有什么坏处。
我发现 here 我应该包含名称 space 并双重转义冒号。
所以下面的代码有效:
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);
}
});
我正在开发 outlook 网络插件,我使用 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 但没有成功。 我不确定我能否使用其他外部库,因为它托管在 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
不是 return 一个集合,虽然我只期待一个项目,但我认为让迭代做好准备并没有什么坏处。
我发现 here 我应该包含名称 space 并双重转义冒号。
所以下面的代码有效:
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);
}
});