试图找出解析无效XML的最有效方法(在php中)。
我尝试解析的元素包含嵌套的,我希望输出到自己的xml文档。
我尝试过简单的XML,但我一直遇到错误。尝试使用DOM,它似乎运作良好,但只能导致能够输出文本。非常感谢您的帮助。
示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<server_name>
<creative>
<content><VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:noNamespaceSchemaLocation="vast.xsd"> <Ad id="222296909"> <InLine> <AdSystem version="2.0">DART_DFA</AdSystem> <AdTitle>In-Stream Video</AdTitle> <Description>parisian love - updated</Description> <Survey/> <Impression id="DART"> <![CDATA[ http://ad.doubleclick.net/imp;v7;x;222296909;0-0;0;45922216;0/0;35460632/35478450/2;;~cs=s%3fhttp://s0.2mdn.net/dot.gif ]]> </Impression> <Creatives> <Creative sequence="1" AdID=""> <Linear> <Duration>00:00:52</Duration> <TrackingEvents> <Tracking event="start"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=11;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="midpoint"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=18;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="complete"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=13;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="mute"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=16;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="pause"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=15;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="fullscreen"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=19;ecn1=1;etm1=0; ]]> </Tracking> </TrackingEvents> <AdParameters/> <VideoClicks> <ClickThrough> <![CDATA[ http://google.com ]]> </ClickThrough> <ClickTracking id="DART"> <![CDATA[ http://ad.doubleclick.net/click%3Bh%3Dv8/3fae/3/0/%2a/k%3B222296909%3B0-0%3B0%3B45922216%3B255-0/0%3B35460632/35478450/2%3B%3B%7Esscs%3D%3fhttp://s0.2mdn.net/dot.gif ]]> </ClickTracking> </VideoClicks> <MediaFiles> <MediaFile id="1" delivery="streaming" type="video/x-flv" bitrate="766" width="854" height="480"> <![CDATA[ rtmp://rmcdn.f.2mdn.net/ondemand/MotifFiles/html/1379578/parisian_love_126566284014011.flv ]]> </MediaFile> <MediaFile id="2" delivery="progressive" type="video/x-flv" bitrate="766" width="854" height="480"> <![CDATA[ http://gcdn.2mdn.net/MotifFiles/html/1379578/parisian_love_126566284014011.flv ]]> </MediaFile> </MediaFiles> </Linear> </Creative> <Creative sequence="1" AdID=""> <CompanionAds> <Companion id="1" width="300" height="250"> <StaticResource creativeType="application/x-shockwave-flash"> <![CDATA[ http://s0.2mdn.net/1379578/PID_1244559_1265644799000_parisian_love_300x250.swf ]]> </StaticResource> <CompanionClickThrough> <![CDATA[ http://google.com ]]> </CompanionClickThrough> <AltText/> <AdParameters/> </Companion> <Companion id="2" width="300" height="250"> <StaticResource creativeType="image/jpeg"> <![CDATA[ http://s0.2mdn.net/1379578/PID_1244559_1265644904000_parisian_love_300x250.jpg ]]> </StaticResource> <CompanionClickThrough> <![CDATA[ http://google.com ]]> </CompanionClickThrough> <AltText/> <AdParameters/> </Companion> <Companion id="3" width="728" height="90"> <StaticResource creativeType="image/jpeg"> <![CDATA[ http://s0.2mdn.net/1379578/PID_1244559_1265644932000_parisian_love_728x90.jpg ]]> </StaticResource> <CompanionClickThrough> <![CDATA[ http://google.com ]]> </CompanionClickThrough> <AltText/> <AdParameters/> </Companion> <Companion id="4" width="728" height="90"> <StaticResource creativeType="application/x-shockwave-flash"> <![CDATA[ http://s0.2mdn.net/1379578/PID_1244559_1265644945000_parisian_love_728x90.swf ]]> </StaticResource> <CompanionClickThrough> <![CDATA[ http://google.com ]]> </CompanionClickThrough> <AltText/> <AdParameters/> </Companion> </CompanionAds> </Creative> <Creative sequence="2" AdID=""> <NonLinearAds> <TrackingEvents> <Tracking event="start"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=11;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="midpoint"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=18;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="complete"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=13;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="mute"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=16;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="pause"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=15;ecn1=1;etm1=0; ]]> </Tracking> <Tracking event="fullscreen"> <![CDATA[ http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=1242003;eid1=19;ecn1=1;etm1=0; ]]> </Tracking> </TrackingEvents> <NonLinear id="1" width="400" height="150" scalable="false" maintainAspectRatio="false"> <StaticResource creativeType="image/jpeg"> <![CDATA[ http://s0.2mdn.net/1379578/PID_1244559_1281625520000_google.jpg ]]> </StaticResource> <NonLinearClickThrough> <![CDATA[ http://google.com ]]> </NonLinearClickThrough> <AdParameters/> </NonLinear> </NonLinearAds> </Creative> </Creatives> <Extensions> <Extension type="DART"> <AdServingData> <DeliveryData> <GeoData> <![CDATA[ ct=US&st=NY&ac=212&zp=10025&bw=3&dma=3&city=13275 ]]> </GeoData> </DeliveryData> </AdServingData> </Extension> </Extensions> </InLine> </Ad> </VAST></content>
</creative>
</server_name>
输出将是元素中包含的所有内容,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:noNamespaceSchemaLocation="vast.xsd">
<Ad id="222296909">
<InLine>
<AdSystem version="2.0">DART_DFA</AdSystem>
<AdTitle>In-Stream Video</AdTitle>
<Description>parisian love - updated</Description>
<Survey />
<Impression id="DART"><![CDATA[http://ad.doubleclick.net/imp;v7;x;222296909;0-0;0;45922216;0/0;35460632/35478450/2;;~aopt=0/0/ff/0;~cs=h%3fhttp://s0.2mdn.net/dot.gif]]></Impression>
<Creatives>
<Creative sequence="1" AdID="">
<Linear>
<Duration>00:00:52</Duration>
<TrackingEvents>
<Tracking event="start"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=11;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="midpoint"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=18;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="complete"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=13;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="mute"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=16;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="pause"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=15;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="fullscreen"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=19;ecn1=1;etm1=0;]]></Tracking>
</TrackingEvents>
<AdParameters />
<VideoClicks>
<ClickThrough><![CDATA[http://google.com]]></ClickThrough>
<ClickTracking id="DART"><![CDATA[http://ad.doubleclick.net/click%3Bh%3Dv8/3fae/3/0/%2a/f%3B222296909%3B0-0%3B0%3B45922216%3B255-0/0%3B35460632/35478450/2%3B%3B%7Eaopt%3D0/0/ff/0%3B%7Esscs%3D%3fhttp://s0.2mdn.net/dot.gif]]></ClickTracking>
</VideoClicks>
<MediaFiles>
<MediaFile id="1" delivery="streaming" type="video/x-flv" bitrate="766" width="854" height="480"><![CDATA[rtmp://rmcdn.f.2mdn.net/ondemand/MotifFiles/html/1379578/parisian_love_126566284014011.flv]]></MediaFile>
<MediaFile id="2" delivery="progressive" type="video/x-flv" bitrate="766" width="854" height="480"><![CDATA[http://gcdn.2mdn.net/MotifFiles/html/1379578/parisian_love_126566284014011.flv]]></MediaFile>
</MediaFiles>
</Linear>
</Creative>
<Creative sequence="1" AdID="">
<CompanionAds>
<Companion id="1" width="300" height="250">
<StaticResource creativeType="application/x-shockwave-flash"><![CDATA[http://s0.2mdn.net/1379578/PID_1244559_1265644799000_parisian_love_300x250.swf]]></StaticResource>
<CompanionClickThrough><![CDATA[http://google.com]]></CompanionClickThrough>
<AltText />
<AdParameters />
</Companion>
<Companion id="2" width="300" height="250">
<StaticResource creativeType="image/jpeg"><![CDATA[http://s0.2mdn.net/1379578/PID_1244559_1265644904000_parisian_love_300x250.jpg]]></StaticResource>
<CompanionClickThrough><![CDATA[http://google.com]]></CompanionClickThrough>
<AltText />
<AdParameters />
</Companion>
<Companion id="3" width="728" height="90">
<StaticResource creativeType="image/jpeg"><![CDATA[http://s0.2mdn.net/1379578/PID_1244559_1265644932000_parisian_love_728x90.jpg]]></StaticResource>
<CompanionClickThrough><![CDATA[http://google.com]]></CompanionClickThrough>
<AltText />
<AdParameters />
</Companion>
<Companion id="4" width="728" height="90">
<StaticResource creativeType="application/x-shockwave-flash"><![CDATA[http://s0.2mdn.net/1379578/PID_1244559_1265644945000_parisian_love_728x90.swf]]></StaticResource>
<CompanionClickThrough><![CDATA[http://google.com]]></CompanionClickThrough>
<AltText />
<AdParameters />
</Companion>
</CompanionAds>
</Creative>
<Creative sequence="2" AdID="">
<NonLinearAds>
<TrackingEvents>
<Tracking event="start"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=11;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="midpoint"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=18;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="complete"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=13;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="mute"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=16;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="pause"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=15;ecn1=1;etm1=0;]]></Tracking>
<Tracking event="fullscreen"><![CDATA[http://ad.doubleclick.net/activity;src=1379578;met=1;v=1;pid=45922216;aid=222296909;ko=0;cid=35460632;rid=35478450;rv=2;timestamp=2886483;eid1=19;ecn1=1;etm1=0;]]></Tracking>
</TrackingEvents>
<NonLinear id="1" width="400" height="150" scalable="false" maintainAspectRatio="false">
<StaticResource creativeType="image/jpeg"><![CDATA[http://s0.2mdn.net/1379578/PID_1244559_1281625520000_google.jpg]]></StaticResource>
<NonLinearClickThrough><![CDATA[http://google.com]]></NonLinearClickThrough>
<AdParameters />
</NonLinear>
</NonLinearAds>
</Creative>
</Creatives>
<Extensions>
<Extension type="DART">
<AdServingData>
<DeliveryData>
<GeoData><![CDATA[ct=US&st=GA&ac=404&zp=30319&bw=0&dma=26&city=13241]]></GeoData>
</DeliveryData>
</AdServingData>
</Extension>
</Extensions>
</InLine>
</Ad>
</VAST>
答案 0 :(得分:0)
简单,只需将元素节点附加到新文档即可。
$source = new DOMDocument();
$source->loadXml($sampleXml);
$xpath = new DOMXpath($dom);
$target = new DOMDocument();
$target->appendChild(
$target->importNode($xpath->evaluate('//VAST')->item(0), TRUE)
);
echo $target->saveXml();