the webservice returned SOAP xml result, i would like to change the format to table in SQL server
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<MemberInformationResponse xmlns="http://www.ucr.com.hk">
<MemberInformationResult>
<Code>0</Code>
<Description>Get Member Info Success </Description>
<MemberCode>9997</MemberCode>
<MemberCardCode>9997</MemberCardCode>
<MemberTypeCode>GOLD2020</MemberTypeCode>
<MemberTypeName1>Gold Member 2020</MemberTypeName1>
<MemberTypeName2>Gold Member 2020</MemberTypeName2>
<OldMemberTypeCode>SilverLINE</OldMemberTypeCode>
<OldMemberTypeName1>Silver Member(LINE)</OldMemberTypeName1>
<OldMemberTypeName2>Silver Member(LINE)</OldMemberTypeName2>
<LoginID>9997</LoginID>
<Name1>SilverLINE</Name1>
<Name2>SilverLINE</Name2>
<Sex>0</Sex>
<Mobile>99900099</Mobile>
<Email>khso@kabu.com.hk</Email>
<PromotionAlert>1</PromotionAlert>
<YearOfBirth>2001</YearOfBirth>
<MonthOfBirth>01</MonthOfBirth>
<JoinDate>2016/03/01</JoinDate>
<WorkingDistrict />
<LivingDistrict />
<ActivationCode>4516</ActivationCode>
<ReferralMemberCardCode>0151136201</ReferralMemberCardCode>
<Enabled>0</Enabled>
<Point>1005</Point>
<Point1>1005</Point1>
<Point2>0</Point2>
<AccumulatedAmount>16376.8</AccumulatedAmount>
<ExpiryDate>2020/08/31</ExpiryDate>
<ExtendExpiryDate>2021/08/31</ExtendExpiryDate>
<PointRemain>0</PointRemain>
<PointExpiryDate>----/--/--</PointExpiryDate>
</MemberInformationResult>
</MemberInformationResponse>
</soap:Body>
</soap:Envelope>
I tried below script, but no result return.
declare @xmldata xml
SET @xmldata = *put above soap xml*
declare @readdoc as INT
EXEC sp_xml_preparedocument @readdoc OUTPUT, @xmldata , '<root xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />'
select Code, MemberCode
from OPENXML(@readdoc,'soap:Envelope/soap:Body/MemberInformationResponse/MemberInformationResult')
with
(
Code int 'Code',
MemberCode [varchar](50) 'MemberCode'
)
EXEC sp_xml_removedocument @readdoc
GO
How to get output like this: | Code | MemberCode | | ---- | ---------- | | 0 | 9997 |
please help to advise. Thanks.
Not an answer....
I believe it's something to do with MemberInformationResponse
being in yet another namespaces
I think the newer way to do this is use the methods of the XML data type
Rather than sp_xml_preparedocument
etc.
If you want to stick with sp_xml_preparedocument
, I suggest you experiment with this. It produces an output and you can iteratively experiment with it.
declare @xmldata VARCHAR(8000)
SET @xmldata = '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<MemberInformationResponse xmlns="http://www.ucr.com.hk">
<MemberInformationResult>
<Code>0</Code>
<Description>Get Member Info Success </Description>
<MemberCode>9997</MemberCode>
<MemberCardCode>9997</MemberCardCode>
<MemberTypeCode>GOLD2020</MemberTypeCode>
<MemberTypeName1>Gold Member 2020</MemberTypeName1>
<MemberTypeName2>Gold Member 2020</MemberTypeName2>
<OldMemberTypeCode>SilverLINE</OldMemberTypeCode>
<OldMemberTypeName1>Silver Member(LINE)</OldMemberTypeName1>
<OldMemberTypeName2>Silver Member(LINE)</OldMemberTypeName2>
<LoginID>9997</LoginID>
<Name1>SilverLINE</Name1>
<Name2>SilverLINE</Name2>
<Sex>0</Sex>
<Mobile>99900099</Mobile>
<Email>khso@kabu.com.hk</Email>
<PromotionAlert>1</PromotionAlert>
<YearOfBirth>2001</YearOfBirth>
<MonthOfBirth>01</MonthOfBirth>
<JoinDate>2016/03/01</JoinDate>
<WorkingDistrict />
<LivingDistrict />
<ActivationCode>4516</ActivationCode>
<ReferralMemberCardCode>0151136201</ReferralMemberCardCode>
<Enabled>0</Enabled>
<Point>1005</Point>
<Point1>1005</Point1>
<Point2>0</Point2>
<AccumulatedAmount>16376.8</AccumulatedAmount>
<ExpiryDate>2020/08/31</ExpiryDate>
<ExtendExpiryDate>2021/08/31</ExtendExpiryDate>
<PointRemain>0</PointRemain>
<PointExpiryDate>----/--/--</PointExpiryDate>
</MemberInformationResult>
</MemberInformationResponse>
</soap:Body>
</soap:Envelope>
'
declare @readdoc as INT
EXEC sp_xml_preparedocument @readdoc OUTPUT, @xmldata, '<root xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />'
select *
from OPENXML(@readdoc,'/soap:Envelope/soap:Body')
EXEC sp_xml_removedocument @readdoc
GO
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.