繁体   English   中英

如何在 sql 服务器中解析 SOAP xml 并显示为表格格式

[英]How to parse SOAP xml in sql server and show to table format

网络服务返回 SOAP xml 结果,我想将格式更改为 SQL 服务器中的表格

<?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 @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

如何像这样获得 output:| 代码 | 会员代码 | | ---- | ---------- | | 0 | 9997 |

请帮忙指教。 谢谢。

没有答案....

我相信这与MemberInformationResponse在另一个命名空间中有关

我认为更新的方法是使用 XML 数据类型的方法

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2005/ms190798(v=sql.90)?redirectedfrom=MSDN

而不是sp_xml_preparedocument等。

如果您想坚持使用sp_xml_preparedocument ,我建议您尝试一下。 它产生一个 output,您可以反复试验它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM