使用分隔符解析文本

时间:2014-06-12 22:55:55

标签: mysql parsing delimiter vast

我试图弄清楚如何从MySQL中的字段解析出一个URL(一个VAST视频标签)。 此字段包含多个不同的行,但应包含相同的XML代码。

这是我要解析的网址:

http://ad.amgdgt.com/ads/?t=dr&f=vast2&p=10582&pl=a75d1869&rnd=<timestamp>

这是整个领域:

<?xml version="1.0" encoding="utf-8"?> <VAST xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> <Ad id="000000"> <Wrapper> <AdSystem version="2.0">DINVICO</AdSystem> <VASTAdTagURI><![CDATA[http://ad.amgdgt.com/ads/?t=dr&f=vast2&p=10582&pl=a75d1869&rnd=<timestamp>]]></VASTAdTagURI> <Impression><![CDATA[<ditu>]]></Impression> <Impression><![CDATA[<comscoreVOX>]]></Impression> <Impression><![CDATA[<comscoreVideo>]]></Impression> <Creatives> <Creative AdID="000000" id="000000" sequence="1"> <Linear> <TrackingEvents> <Tracking event="start"><![CDATA[<event_12>]]></Tracking> <Tracking event="firstQuartile"><![CDATA[<event_13>]]></Tracking> <Tracking event="midpoint"><![CDATA[<event_14>]]></Tracking> <Tracking event="thirdQuartile"><![CDATA[<event_15>]]></Tracking> <Tracking event="complete"><![CDATA[<event_16>]]></Tracking> <Tracking event="mute"><![CDATA[<event_17>]]></Tracking> <Tracking event="unmute"><![CDATA[<event_18>]]></Tracking> <Tracking event="rewind"><![CDATA[<event_20>]]></Tracking> <Tracking event="resume"><![CDATA[<event_21>]]></Tracking> <Tracking event="expand"><![CDATA[<event_23>]]></Tracking> <Tracking event="collapse"><![CDATA[<event_24>]]></Tracking> <Tracking event="acceptInvitation"><![CDATA[<event_26>]]></Tracking> <Tracking event="pause"><![CDATA[<event_19>]]></Tracking> <Tracking event="fullscreen"><![CDATA[<event_22>]]></Tracking> <Tracking event="close"><![CDATA[<event_27>]]></Tracking> <Tracking event="creativeView"><![CDATA[<event_11>]]></Tracking> </TrackingEvents> <VideoClicks> <ClickTracking><![CDATA[<click_tag>]]></ClickTracking> </VideoClicks> </Linear> </Creative> </Creatives> <Extensions> </Extensions> </Wrapper> </Ad> </VAST>

如您所见,HTML链接由<VASTAdTagURI><![CDATA[分隔... ]]></VASTAdTagURI>

如何告诉MySQL选择并仅返回两个分隔符中的HTML链接?

以下是我正在使用的SQL,它返回整个XML代码:

select
a.name as Advertiser_Name,
a.aid as Advertiser_ID,
b.name as Creative_Name,
b.id_creative as Creative_ID,
bt.tag as XML_Code,
bt.tag_secure as XML_Code_Secure

from advertisers a
inner join campaigns c on c.aid=a.aid
inner join banners b on b.cid=c.cid
inner join banner_tags bt on bt.bid=b.bid
inner join placement p on p.cid=c.cid
inner join locations l on l.lid=p.lid
inner join sites s on s.sid=l.sid

where s.pid='<Partner_ID>' and b.status=1 and c.status in (-1,0,1,2)

group by b.id_creative

order by b.status

2 个答案:

答案 0 :(得分:1)

将XPath与ExtractValue()一起使用:

SELECT ExtractValue(col, '/VAST/Ad/Wrapper/VASTAdTagURI/text()');

答案 1 :(得分:0)

不了解ExtractValue方法。这是获取它的一种愚蠢方式(使用LOCATESUBSTR

SET @s:='<?xml version="1.0" encoding="utf-8"?> <VAST xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> <Ad id="000000"> <Wrapper> <AdSystem version="2.0">DINVICO</AdSystem> <VASTAdTagURI><![CDATA[http://ad.amgdgt.com/ads/?t=dr&f=vast2&p=10582&pl=a75d1869&rnd=<timestamp>]]></VASTAdTagURI> <Impression><![CDATA[<ditu>]]></Impression> <Impression><![CDATA[<comscoreVOX>]]></Impression> <Impression><![CDATA[<comscoreVideo>]]></Impression> <Creatives> <Creative AdID="000000" id="000000" sequence="1"> <Linear> <TrackingEvents> <Tracking event="start"><![CDATA[<event_12>]]></Tracking> <Tracking event="firstQuartile"><![CDATA[<event_13>]]></Tracking> <Tracking event="midpoint"><![CDATA[<event_14>]]></Tracking> <Tracking event="thirdQuartile"><![CDATA[<event_15>]]></Tracking> <Tracking event="complete"><![CDATA[<event_16>]]></Tracking> <Tracking event="mute"><![CDATA[<event_17>]]></Tracking> <Tracking event="unmute"><![CDATA[<event_18>]]></Tracking> <Tracking event="rewind"><![CDATA[<event_20>]]></Tracking> <Tracking event="resume"><![CDATA[<event_21>]]></Tracking> <Tracking event="expand"><![CDATA[<event_23>]]></Tracking> <Tracking event="collapse"><![CDATA[<event_24>]]></Tracking> <Tracking event="acceptInvitation"><![CDATA[<event_26>]]></Tracking> <Tracking event="pause"><![CDATA[<event_19>]]></Tracking> <Tracking event="fullscreen"><![CDATA[<event_22>]]></Tracking> <Tracking event="close"><![CDATA[<event_27>]]></Tracking> <Tracking event="creativeView"><![CDATA[<event_11>]]></Tracking> </TrackingEvents> <VideoClicks> <ClickTracking><![CDATA[<click_tag>]]></ClickTracking> </VideoClicks> </Linear> </Creative> </Creatives> <Extensions> </Extensions> </Wrapper> </Ad> </VAST>';
SELECT LOCATE('<VASTAdTagURI><![CDATA[', @s)+LENGTH('<VASTAdTagURI><![CDATA[') start_pos,  
       LOCATE(']]></VASTAdTagURI>', @s, LOCATE('<VASTAdTagURI><![CDATA[', @s)) end_pos,
       LOCATE(']]></VASTAdTagURI>', @s, LOCATE('<VASTAdTagURI><![CDATA[', @s)) - (LOCATE('<VASTAdTagURI><![CDATA[', @s)+LENGTH('<VASTAdTagURI><![CDATA[')) len,
       SUBSTR(@s, 
              LOCATE('<VASTAdTagURI><![CDATA[', @s)+LENGTH('<VASTAdTagURI><![CDATA['), 
              LOCATE(']]></VASTAdTagURI>', @s, LOCATE('<VASTAdTagURI><![CDATA[', @s)) - (LOCATE('<VASTAdTagURI><![CDATA[', @s)+LENGTH('<VASTAdTagURI><![CDATA['))) url;