簡體   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