Reputation: 117
with the following query Im trying to Read MessageID and DocPurpose. but only Message ID is showing fine.... Can anyone tellme what Im missing? It will be apreciated
Declare @XmlData XML =
'<Envelope xmlns="http://schemas.microsoft.com/dynamics/2011/01/documents/Message">
<Header>
<MessageId>e96d3ee4-5cca-4b3e-be60-d1284a0fb02f</MessageId>
<Company>CompanyX</Company>
<Action>http://schemas.microsoft.com/dynamics/2008/01/services/ReturnOrderInService/create</Action>
<ConversationId>320034ab-f5ee-41b0-ba35-e0669c2bf1b8</ConversationId>
<RequestMessageId>e96d3ee4-5cca-4b3e-be60-d1284a0fb02f</RequestMessageId>
</Header>
<Body>
<MessageParts>
<ReturnOrderIn xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/ReturnOrderIn">
<DocPurpose xmlns="">Original</DocPurpose>
<SenderId xmlns="">Xcorp</SenderId>
<SalesTable class="entity" xmlns="">
<_DocumentHash>63cf8580-92fe-4b17-b15c-8e619eecf71f</_DocumentHash>
<CurrencyCode>USD</CurrencyCode>
<CustAccount>147854</CustAccount>
<LanguageId>en-us</LanguageId>
<Reservation>None</Reservation>
<ReturnDeadline>2014-10-10</ReturnDeadline>
<ReturnReasonCodeId>Reason</ReturnReasonCodeId>
<SalesName>Stores</SalesName>
<SalesLine class="entity">
<DefaultDimension>
<Values xmlns="http://schemas.microsoft.com/dynamics/2008/01/sharedtypes">
<Value>
<Name>Site</Name>
<Value>VN</Value>
</Value>
</Values>
</DefaultDimension>
<ExpectedRetQty>-5</ExpectedRetQty>
<ItemId>Else</ItemId>
<Name>Something</Name>
<PriceUnit>11.00</PriceUnit>
<SalesQty>-15.00</SalesQty>
</SalesLine>
</SalesTable>
</ReturnOrderIn>
</MessageParts>
</Body>
</Envelope>'
Declare @MessageId varchar(50)
;WITH XMLNAMESPACES('http://schemas.microsoft.com/dynamics/2011/01/documents/Message' As a,
'http://schemas.microsoft.com/dynamics/2008/01/documents/ReturnOrderIn' As b,
default 'http://schemas.microsoft.com/dynamics/2011/01/documents/Message')
Select @MessageId =MessageId from
(SELECT
t.c.value('a:MessageId[1]', 'varchar(50)') MessageId
FROM @XmlData.nodes('/Envelope/Header') AS t(c)) x
Declare @DocPurpose varchar(50)
;WITH XMLNAMESPACES('http://schemas.microsoft.com/dynamics/2011/01/documents/Message' As a,
'http://schemas.microsoft.com/dynamics/2008/01/documents/ReturnOrderIn' As b,
default 'http://schemas.microsoft.com/dynamics/2011/01/documents/Message')
Select @DocPurpose = DocPurpose from
(SELECT
t.d.value('b:DocPurpose[1]', 'varchar(50)') DocPurpose
FROM @XmlData.nodes('Envelope/body/MessageParts/b:ReturnOrderIn') AS t(d))z
Print 'MessageID>>>>>>' + @MessageId
Print @DocPurpose
Upvotes: 1
Views: 129
Reputation: 89295
<DocPurpose xmlns="">
node is in empty namespace, not the default namespace. Since we can't declare a prefix to map empty namespace URI, just don't declare a default
in ;WITH XMLNAMESPACES
block. Try this way :
Declare @DocPurpose varchar(50)
;WITH XMLNAMESPACES
('http://schemas.microsoft.com/dynamics/2011/01/documents/Message' As a,
'http://schemas.microsoft.com/dynamics/2008/01/documents/ReturnOrderIn' As b)
Select @DocPurpose = DocPurpose from
(
SELECT t.d.value('DocPurpose[1]', 'varchar(50)') DocPurpose
FROM @XmlData.nodes('a:Envelope/a:Body/a:MessageParts/b:ReturnOrderIn') AS t(d)
)z
Small thing but matter, you need uppercase B
for Body
.
Upvotes: 2