2014-01-15 2 views
0

Нижеприведенный код читателя AS # вытащил заголовки из элементов RSS, но, похоже, также включает разметку XML. Как не включать разметку XML без использования Regex или string replace?ActionScript RSS Заголовок вопроса

import flash.text.TextField; 
import flash.text.TextFormat; 
import flash.net.URLLoader; 
import flash.events.IOErrorEvent; 


//Read RSS feeds 
var RSS_xmlData: XML = new XML(); 
var xmlLoader: URLLoader = new URLLoader(); 
xmlLoader.addEventListener(Event.COMPLETE, LoadXML); 

xmlLoader.load(new URLRequest("http://www.oshawa.ca/news_rss.asp")); 

function LoadXML(e:Event):void { 
    dtext.text="Loading..."; 
    RSS_xmlData = new XML(e.target.data); 
    pullFeed(RSS_xmlData); 

} 

function pullFeed(rss: XML):void {  
    var str: String=""; 
    str = rss.channel.item.title; 
    str = str.replace(/\s*\n/g," | "); 
    //str = str.replace(/'/g,"\""); 

    //// shows specific entry 
    var items: Array = new Array(); 
    items = str.split("|"); 

    var tf: TextField = dtext; 
    var i:Number=0; 
    var myTimer:Timer = new Timer(4000,1000); 
    myTimer.addEventListener(TimerEvent.TIMER, timerListener); 
    function timerListener (e:TimerEvent):void{ 
     tf.text = items[i].toString(); 
     scaleTextToFitInTextField(tf); 
     i = i < items.length - 1 ? i + 1 : 0; 
    } 
    myTimer.start(); 
} 

function scaleTextToFitInTextField(txt: TextField):void { 
    var f: TextFormat = txt.getTextFormat(); 
    f.size = (txt.width > txt.height) ? txt.width : txt.height; 
    txt.setTextFormat(f); 

    while (txt.textWidth > txt.width - 4 || txt.textHeight > txt.height - 6) { 
     f.size = int(f.size) - 1; 
     txt.setTextFormat(f); 
    } 
} 


function onIOError(e:IOErrorEvent):void 
{ 
    trace(e.toString()); 
    dtext.text="Finding Feed..."; 
} 

Спасибо за любую помощь.

ответ

1

Причины вы получаете XML-разметку есть, потому что значение, возвращаемое rss.channel.item.title имеет типа XMLList, соответствующую все <title> узлов совпавших по этому выбору - а не только текстовое содержания этих узлов. Как вы уже отметили, скорее наоборот, чтобы преобразовать это в String, а затем вычеркнуть постороннюю разметку вручную.

Я бы перебирал все узлы <item> и добавлял их содержимое <title> в массив, как вы идете. Новый метод pullFeed будет выглядеть:

function pullFeed(rss: XML):void {  
    var items:Array = new Array();     //Declare Array of titles 
    var numItems:int = rss.channel.item.length(); //Capture number of <item> nodes 

    for (var i:int = 0; i < numItems; i++) { 
     items.push(String(rss.channel.item[i].title)); //Add each <item>'s <title> to the Array 
    } 

    var tf: TextField = dtext; 
    var i:Number=0; 
    var myTimer:Timer = new Timer(4000,1000); 
    myTimer.addEventListener(TimerEvent.TIMER, timerListener); 
    function timerListener (e:TimerEvent):void{ 
     tf.text = items[i]; 
     scaleTextToFitInTextField(tf); 
     i = i < items.length - 1 ? i + 1 : 0; 
    } 
    myTimer.start(); 
} 

одна польза переборе узлов XML таким образом, что вы могли бы легко захватить содержание <description> или <pubDate> каждого <item> на одном проходе через XML, если вы планировали использовать это позже.

Смежные вопросы