代码之家  ›  专栏  ›  技术社区  ›  Anriëtte Myburgh

Flash在Windows和Mac上以不同方式加载XML

  •  0
  • Anriëtte Myburgh  · 技术社区  · 15 年前

    我正在使用AS2.0加载XML文件。在Mac上,所有元素都完全加载,但我一在Windows上运行它,就只加载第一个类型的元素 item 荷载。当我在Mac上运行它时,元素被加载 项目 是单独的按钮。当我在Windows上运行它时,只有一个按钮出现,它的名称是ch1。维珍集团控股公司。其他的都没有 项目 元件负载。我没有Windows版本的Flash,因此无法调试。

    是否有其他方法来确定这与XML文件加载不完整或movieclips的深度有关?这是 URL

    以下是我的XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <menu>
        <item link="vgh" name="ch1. Virgin Group Holdings" movie="VirleoGH">
            <menuitem link="vgh_overview">Group Overview</menuitem>
            <menuitem link="vgh_capacity">Group Capacity</menuitem>
            <menuitem link="vgh_archive">Certification Archive</menuitem>
            <menuitem link="vgh_timeline">Timeline</menuitem>
        </item>
        <item link="mdb" name="ch2. Manny Design Bureau" movie="MechanologyDB">
            <menuitem link="mdb_overview">Overview</menuitem>
            <menuitem link="mdb_archive">Works Archive</menuitem>
            <menuitem link="mdb_showroom">Showroom</menuitem>
            <menuitem link="mdb_skills">Core Skills</menuitem>
            <menuitem link="mdb_products">Products</menuitem>
        </item>
        <item link="sai" name="ch3. Special Autonomic Industries" movie="SpecialAI">
            <menuitem link="sai_overview">Overview</menuitem>
            <menuitem link="sai_archive">Works Archive</menuitem>
            <menuitem link="sai_showroom">Showroom</menuitem>
            <menuitem link="sai_skills">Core Skills & Serices</menuitem>
            <menuitem link="sai_products">Products</menuitem>
            <menuitem link="sai_infrastructure">Infrastructure</menuitem>
        </item>
        <item link="iacs" name="ch4. Interesting And Cool Stuff"></item>
    </menu>
    

    下面是我加载XML文件的代码:

    var xmlFile:String = "menu.xml";
    var menu:XML = new XML();
    // ignores spaces and declaration in XML file, improves parsing of XML file
    menu.ignoreWhite = true;
    
    // create 'mainMenu' (type Menu), holds all functions related to menu and constructs array from XML
    var mainMenu:Menu = new Menu();
    
    // event handler triggerred when XML is completely loaded
    menu.onLoad = function(success:Boolean) {
    
        if (success) {
            // passes XML file to buildMenu function in Menu class to build menu Array
            mainMenu.buildMenu(this);
            // passes 'mainMenu' (type Menu) to buildScene function, builds whole scene with individual MC's
            buildScene(mainMenu);
    
            // set depth of navigation to top of pile, in order for buttons to move behind the navigation, instead of on top of it
            _root.navigation.swapDepths(theScene);
        }
    }
    
    // load XML file
    menu.load(xmlFile);
    

    有人介意给我指点我错过的陷阱吗?

    问候&tia

    //编辑buildmenu()函数的src

    // build multi-dimensional array from XML file received
        function buildMenu(menu:XML):Void {
    
            // determine how many chambers there are now
            menuArray = menu.firstChild.childNodes;
            var length:Number = menuArray.length;
    
            // dynamic according to number of chambers
            for (var i:Number = 0; i < length; i++) {
                var sublength:Number = menuArray[i].childNodes.length;
                var submenu:Array = new Array();
    
                // chamber name and link
                var xmlNode:XMLNode = menuArray[i];
                submenu["name"] = xmlNode.attributes.name;
                submenu["link"] = xmlNode.attributes.link;
                submenu["movie"] = xmlNode.attributes.movie;
    
                trace(submenu["name"]);
    
                // create sub-item for each chamber
                for (var j:Number = 0; j < sublength; j++) {
                    var subXmlNode:XMLNode = xmlNode.childNodes[j];
    
                    var item:Array = new Array(subXmlNode.firstChild, subXmlNode.attributes.link);
                    submenu.push(item);
                }
    
                // create an entry for each chamber
                mainmenu.push(submenu);
            }
        }
    

    //编辑2

    我现在从远程服务器(Linux设备)运行这个文件,但是仍然只有第一个元素加载到Windows上,没有兄弟姐妹。在Mac上,一切都很好,我已经走到了死胡同,为此我的最后期限(草案2)在大约12小时内,我仍然需要一个晚上的休息。有人知道这可能是什么吗?任何建议或建议都将被诚意接受。这个 url

    问候和短暂性脑缺血发作。

    //编辑3

    我现在正在Windows中进行调试,发现XML文件最终会完全加载。奇怪的是我追踪 _x _y 所有movieclip的值,都会不断地变化到一个可接受的值,但舞台上仍然只能看到第一个添加的movieclip。我追踪了它们的深度,事实上它们是不同的,它们被启用(追踪),它们是 _visible (也追溯到了这一点),除了我在Windows上运行它,所有东西都在Mac上运行得很好,很明显,Windows中的Flash播放器在做一些意想不到的事情时,有人以前遇到过这个问题吗?

    我非常感谢你的帮助。

    问候和短暂性脑缺血发作。

    3 回复  |  直到 15 年前
        1
  •  0
  •   Lars Blåsjö    15 年前

    我不确定这是您的问题的原因,但在XML中需要注意的两件事是,“核心技能和服务”中的&使XML无效。flash对这类事情相当宽容,但更严格的解析器会将其报告为错误。例如,firefox不会显示该XML,并根据&的位置报告“XML解析错误:格式不正确”。尝试在firefox(或ie)中打开XML文件通常是发现flash/as2不会报告的XML错误的快速方法。

    因此,要在文本中使用&号,需要将文本标记为CDATA,使其成为有效的XML:

    <menuitem link="sai_skills"><![CDATA[Core Skills & Services]]></menuitem>
    

    另一个需要注意的问题(同样,这可能不是问题的原因)是确保文件实际上是以UTF-8格式保存的。在XML本身中使用encoding=“utf-8”是不够的,还需要将文件保存为utf-8。这是一个很常见的错误,但正如您所说,您使用Dreamweaver,我认为Dreamweaver通常会处理这方面的问题。

        2
  •  0
  •   greg    15 年前

    您对XML文件使用什么编辑器? Windows和Mac有不同的行尾字符。

        3
  •  0
  •   Rodrigo    15 年前

    你试过吗?

    menu.ignoreWhite = false;
    

    Windows使用CR+LF标记换行符,Mac使用LF