/ Published in: ActionScript 3
TimedText (TT) XML captions files can have namespaces that cause problems when parsing them in AS3. To get around this you can use this code to remove the namespace from the root XML node using Regex. This example uses
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class Main extends Sprite { private var _xmlFilename:String = "captions.xml"; private var _subtitlesXml:XML; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); var urlLoader:URLLoader = new URLLoader(); urlLoader.dataFormat = URLLoaderDataFormat.TEXT; urlLoader.addEventListener(Event.COMPLETE, onSubtitlesXmlLoadComplete); urlLoader.load(new URLRequest(_xmlFilename)); } private function onSubtitlesXmlLoadComplete(e:Event):void { _subtitlesXml = new XML(e.target.data); trace("ORIGINAL TIMEDTEXT XML:\n" + _subtitlesXml.toString()); var myXmlStr:String = _subtitlesXml.toString(); var xmlnsPattern:RegExp = new RegExp("xmlns[^\"]*\"[^\"]*\"", "gi"); myXmlStr = myXmlStr.replace(xmlnsPattern, ""); myXmlStr = myXmlStr.replace("aaa:lang=\"en\"", ""); _subtitlesXml = new XML(myXmlStr); trace("MODIFIED TIMEDTEXT XML:\n" + _subtitlesXml.toString()); var numCaptions:int = _subtitlesXml.body.div.p.length(); trace("numCaptions: " + numCaptions); } } } ///////////////////////////////////////////////////////////////////// // captions.xml ///////////////////////////////////////////////////////////////////// <?xml version="1.0" encoding="UTF-8"?> <tt xml:lang="en" xmlns="http://www.w3.org/2006/04/ttaf1" xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling"> <head> <styling> </styling> </head> <body> <div> <p begin="00:00:00.440">Caption 1 here</p> <p begin="00:00:08.799">Caption 2 here</p> </div> </body> </tt> ///////////////////////////////////////////////////////////////////// // OUTPUT ///////////////////////////////////////////////////////////////////// ORIGINAL TIMEDTEXT XML: <tt aaa:lang="en" xmlns="http://www.w3.org/2006/04/ttaf1" xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling" xmlns:aaa="http://www.w3.org/XML/1998/namespace"> <head> <styling/> </head> <body> <div> <p begin="00:00:00.440">Caption 1 here</p> <p begin="00:00:08.799">Caption 2 here</p> </div> </body> </tt> MODIFIED TIMEDTEXT XML: <tt> <head> <styling/> </head> <body> <div> <p begin="00:00:00.440">Caption 1 here</p> <p begin="00:00:08.799">Caption 2 here</p> </div> </body> </tt> numCaptions: 2