Извлекать определенные элементы из XML по мере необходимости - PullRequest
0 голосов
/ 19 сентября 2011

Я немного застрял и действительно мог бы помочь. Я разместил здесь вопрос ранее, но я выяснил, в чем проблема ... вроде. Не полностью, но достаточно, чтобы понять, что, возможно, я пытаюсь отрегулировать его.

Итак, теперь я спрашиваю, хватит ли у кого-нибудь сердца, чтобы сказать мне, как я возьму этот код и исправлю его, чтобы я мог включать файлы SWF и изображения только тогда, когда они мне нужны. Они не всегда будут в каждом узле:

var pageXMLLoader = new URLLoader();
pageXMLLoader.load(new URLRequest("scripts/xml/content.xml"));
pageXMLLoader.addEventListener(Event.COMPLETE, pageXMLLoaded);
//This function is called when the XML file is loaded


function pageXMLLoaded(e:Event):void {

    //Create a new XML object from the loaded XML data
    //pageXML = new XML(pageXMLLoader.data);
    pageXML = new XML(e.target.data);

}


// Set page number variable
var pageNumber:uint;

mcContent.y = 30;

// Set up if for mouse click
if (e.type == MouseEvent.CLICK) {

    // Switch based on target name
    switch (e.currentTarget.name) {
        case "navBtn0" :
            trace(e.currentTarget.name);
            pageNumber = 1;

            mcContent.removeChildAt(0);

            mcContent.addChildAt(pageContent,0);

            pageContent.addChild(contentTxt);
            pageContent.addChild(headingTxt);

            break;

        case "navBtn1" :
            trace(e.currentTarget.name);
            pageNumber = 2;

            mcContent.removeChildAt(0);

            mcContent.addChildAt(pageContent,0);

            pageContent.addChild(contentTxt);
            pageContent.addChild(headingTxt);

            break;

        case "navBtn2" :
            ... code shortened
    }


    // Loop through the XML file
    for each (var page:XML in pageXML.pages.page) {

        // "page.@pagenumber" points to "pagenumber" in the XML file.
        if (page.@ pagenumber == pageNumber) {

            // Set the title
            headingTxt.htmlText = page.title;

            // Set the page content
            contentTxt.htmlText = page.content;
            contentRTopTxt.htmlText = page.contenttr;
            contentRBottomTxt.htmlText = page.contentbr;

            // Exit the loop
            break;
        }
    } // < /For Loop >

1 Ответ

0 голосов
/ 19 сентября 2011

Я заблудился в вашем коде, но вот быстрый пример того, как вы можете получить правильную страницу, используя E4X (var pageContent : XML = pageXML.pages.page.(@pagenumber == 1)[0];), а также проверить, существует ли изображение или SWF.

Test.as

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class TestXMLPages extends Sprite
    {

        private var pageXML : XML;

        private var swfContainer : Sprite = new Sprite();
        private var imgContainer : Sprite = new Sprite();
        private var imgLoader : Loader = new Loader();
        private var swfLoader : Loader = new Loader();

        public function TestXMLPages()
        {
            super();

            var pageXMLLoader : URLLoader = new URLLoader();
                pageXMLLoader.load(new URLRequest("xml/content.xml"));
                pageXMLLoader.addEventListener(Event.COMPLETE, pageXMLLoaded);
        }

        private function pageXMLLoaded(e : Event) : void
        {
            pageXML = new XML(e.target.data);

            // select page with pagenumber 1
            var pageContent : XML = pageXML.pages.page.(@pagenumber == 1)[0];

            // has image?
            if(pageContent.image.length() > 0)
                trace("add image!")

            // has swf?
            if(pageContent.swfURL.length() > 0)
                trace("add swf!")

            trace(pageContent.toXMLString())
        }
    }
}

content.xml

<?xml version="1.0" encoding="utf-8"?>
<site>

    <!--<sitetitle><![CDATA[<strong>Transplant the Heart</strong>]]></sitetitle>-->

    <pages>

        <page pagenumber="1">

            <title><![CDATA[<h1>Page #1</h1>]]></title>

            <content><![CDATA[<p>Aliquam nec dui neque. Aenean rutrum suscipit turpis vel fringilla. </p>]]></content>

            <contenttr><![CDATA[Cras non risus nisi. Nam tincidunt lacinia massa, vel interdum massa ultricies.]]></contenttr>

            <contentbr><![CDATA[Aliquam erat volutpat. Etiam eget mauris ante, sit amet placerat tortor.]]></contentbr>

            <image>imgs/png/titleLarge.png</image>

            <swfURL>transplantSpecialists.swf</swfURL>

        </page>

        <page pagenumber="2">

            <title><![CDATA[<h1>Page #2</h1>]]></title>

            <content><![CDATA[<p>Aliquam nec dui neque. Aenean rutrum suscipit turpis vel fringilla. </p>]]></content>

            <contenttr><![CDATA[Cras non risus nisi. Nam tincidunt lacinia massa, vel interdum massa ultricies.]]></contenttr>

            <contentbr><![CDATA[Aliquam erat volutpat. Etiam eget mauris ante, sit amet placerat tortor.]]></contentbr>

        </page>

    </pages>

</site>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...