xml是存在于xml_message表的clob列中。
<?xml version="1.0" encoding="UTF-8"? >
<soapenv:Envelope xmlns:oag="http://gateway.consumerhub.commercial.volvocars. net/oagis" xmlns:oag1="http://www.openapplications.org/oagis" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:body>
<oag:UpdateConsumerAndOpportunityData_v1 xmlns:ns3="http://www.ford.com/oagis"/span>>/span>
<oag1:ApplicationArea>/span>
<oag1:Sender>/span>
<oag1:LogicalId>Volvo</oag1:LogicalId>/span>
<oag1:Component>Vista</oag1:Component>
<oag1:Task>/span>SyncConsumer</oag1:Task>
<oag1:AuthorizationId>/span>AUTH-SK034</oag1:AuthorizationId>/span>
</oag1:Sender>/span>
<oag1:CreationDateTime>/span>2016-01-27T15:07:47Z</oag1:CreationDateTime>/span>
<oag1:BODId>sk-connect-034</oag1:BODId>
</oag1:ApplicationArea>/span>
<oag:DataArea>/span>
<oag1:Sync confirm="Always"/span>>
<oag1:SyncCriteria expressionLanguage="XPath"/span>>
<oag1:SyncExpression action="change"/span>/>
</oag1:SyncCriteria>
</oag1:Sync>
<oag:Consumer>/span>
<oag:Header>>
<oag:Source>/span>AU</oag:Source>
</oag:Header>>
<oag:ConsumerDetails Category="person">
<oag:ConsumerId/>/span>
<oag:Language>EN</oag:Language>
<oag:PersonDetails>/span>
<oag:FirstName>firstname_email_034</oag:FirstName>
<oag:Surname>sname_email_034</oag:Surname>
</oag:PersonDetails>/span>
<oag: EmailAddress Active="true">[email protected]</oag:EmailAddress>
<oag: EmailAddress Active="true" Usage="Business"> [email protected]</oag: EmailAddress>
<oag: EmailAddress Active="true" Usage="Invoice" > [email protected]</oag: EmailAddress>
</oag: ConsumerDetails>/span>
</oag:Consumer>/span>
</oag:DataArea>/span>
</oag:UpdateConsumerAndOpportunityData_v1>
</soapenv:Body>
</soapenv:Envelope>/span>
現在我想從這個xml中獲取所有的電子郵件地址,并插入到另一個表中。 這個xml包含3個電子郵件地址,我想取到n個電子郵件地址,一個xml檔案將包含這些地址
。uj5u.com熱心網友回復:
正如鏈接的答案所示,你可以使用XMLTable來提取多個值;但你至少需要定義你使用的命名空間,并正確構建XPath。因此,為了只獲得電子郵件地址,你可以這樣做:
select x.emailaddress
from xml_message m
交叉應用xmltable ()
xmlnamespaces (
'http://schemas.xmlsoap.org/soap/envelope/' as "soapenv",
'http://gateway.consumerhub.commercial.volvocars.net/oagis' 作為 "oag"。
'http://www.openapplications.org/oagis' 作為 "oag1"。
'http://www.ford.com/oagis' as "ns3")
)。)
'soapenv:Envelope/soapenv:Body/oag:UpdateConsumerAndOpportunityData_v1/oag:資料區域/oag:消費者/oag:消費者細節/oag:EmailAddress'
通過xmltype(m.xml_clob)
列
EmailAddress varchar2(64) path '.
) x。
| EMAILADDRESS | 。
|---|
| [email protected] | 。[email protected] | [email protected] |
XPath沒有提到oag1或ns3,但無論如何包括它們也無妨,而且你可能需要它們來從同一個XML檔案中提取其他資訊。
這還可以讓你一次提取多個值;或者根據一個屬性進行過濾--例如,你可能只想包括屬性Active設定為true的電子郵件地址,你可以通過在XPath中添加該條件來做到這一點:
'soapenv:Envelope/soapenv:Body/oag:UpdateConsumerAndOpportunityData_v1/oag: DataArea/oag:Consumer/oag:ConsumerDetails/oag:EmailAddress[@Active="true"/span>]'
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334025.html
標籤:
上一篇:SQLITE記錄不更新
