zoukankan      html  css  js  c++  java
  • flash读取不同格式xml

    xml格式数据两种写法如下:
    第一种
    //声明省略,不影响flash读取
    //<?xml version="1.0" encoding="UTF-8" ?>
    <root>
       <body>
         <id>1</id>
          <name>第一个</name>
          <property>绝对第一个属性</property>
       </body>
       <body>
          <id>2</id>
          <name>第二个</name>
          <property>绝对第二个属性</property>
       </body>
    </root>

    第二个
    <root>
      <body id="1" name="第一个" property="绝对第一个" />
      <body id="1" name="第一个" property="绝对第二个" />
    </root>

     

    例1:课本.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <课本>
      <书名>语文</书名>
      <书名>数学</书名>
      <书名>历史</书名>
      <书名>音乐</书名>
    </课本>

    这是个很简单的xml文档。

    如果想增加其他信息,可以继续修改这个xml文档:

    <?xml version="1.0" encoding="UTF-8"?>
    <课本>

      <具体>
        <书名>语文</书名>
        <定价>5</定价>
      </具体>

      <具体>
        <书名>数学</书名>
        <定价>5.5</定价>
      </具体>

      <具体>
        <书名>历史</书名>
        <定价>6.5</定价>
      </具体>

      <具体>
        <书名>音乐</书名>
        <定价>4.5</定价>
      </具体>

    </课本>

    看起来这个xml内容稍微有一点点实用的意思。

    但是写法不止一种,比如:

    <?xml version="1.0" encoding="UTF-8"?>
    <课本>
      <具体 书名="语文" 定价="5"/>
      <具体 书名="数学" 定价="5.5"/>
      <具体 书名="历史" 定价="6.5"/>
      <具体 书名="音乐" 定价="4.5"/>
    </课本>

    这种看起来更直观些,它使用了属性/值对的方法。当标签没有文本节点时,尾标签可省略为</>.

    属性可以通过attributes得到,节点名称通过nodeName得到,节点值通过nodeValue得到。

    再开看一个xml文档结构,通过该结构来说对号入座的讲解:

    这个图中文档结构来看,

    <根></根>这一对标签所包含的部分,就是firstChild

    其下有两对并列的<课本></课本>标签包含部分,这是firstChild.childNodes,是一个数组,第一个元素是firstChild.childNodes[0],第二个元素是firstChild.childNodes[1]。

    拿firstChild.childNodes[0]来说,下一级又有子节点,firstChild.childNodes[0].childNodes表示,也就是

    <n1 书名="语文">6</n1>
    <n2 书名="数学">8</n2>
    <n3 书名="英语">5</n3>
    <n4 书名="美术">15</n4>

    firstChild.childNodes[0].childNodes[0],或者firstChild.firstChild.firstChild,就来到了

    <n1 书名="语文">6</n1>

    n1是标签,也是节点,姑且叫它标签节点,节点名称(nodeName)是"n1"。6是文本,也是节点,叫文本节点,节点名称null,节点值(nodeValue)是6。这里两个节点并不是平级,6是 n1的子级。 "书名"是属性(attributes),属性值是"语文"。

    二、flash读取xml

    xml文件名:课本.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <课本>
      <具体 >
        <年级>一年级</年级>
        <书名>语文</书名>
        <定价>5</定价>
      </具体>
      <具体>
        <年级>二年级</年级>
        <书名>语文</书名>
        <定价>6</定价>
      </具体>
      <具体>
        <年级>三年级</年级>
        <书名>历史</书名>
        <定价>8</定价>
      </具体>
    </课本>

    ''''''''''''''''''''''''''''''''''''''''''''''''

    flash文件名:l_xml.fla

    var lx:XML = new XML();
    lx.ignoreWhite = true;
    lx.onLoad = function(s:Boolean) {
    if (s) {

    /*********************************************
    先定位根节点root,再定位根节点的首节点。用for的双循环循环得到数据,显示在文本框中。
    有时候真的是感觉很混乱,不过多用trace()测试一下就清楚了。
    *********************************************/
       var root:XMLNode = lx.firstChild;
       var newnode:XMLNode = root.firstChild;
       for (j=0; j<root.childNodes.length; j++) {
        t.text += "-----------------\n";
        for (i=0; i<newnode.childNodes.length; i++) {
         t.text += root.childNodes[j].childNodes[i].nodeName+":"+root.childNodes[j].childNodes[i].firstChild+"\n";
        }
        t.text += "-----------------";
       }
    } else {
       t.text = "cuo";
    }
    };
    lx.load("课本11.xml");

    ''''''''''''''''''''''''''''''''

    flash显示效果:

    再做个练习:

    书费.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <根>
      <课本 年级="一年级">
        <n1 书名="语文" >6</n1>
        <n2 书名="数学" >8</n2>
        <n3 书名="英语" >5</n3>
        <n4 书名="美术" >15</n4>
      </课本>
      <课本 年级="二年级">
        <n1 书名="语文" >7</n1>
        <n2 书名="数学" >6</n2>
        <n3 书名="英语" >9</n3>
      </课本>
    </根>

    l_书费.fla:

    var myxml:XML = new XML();
    myxml.ignoreWhite = true;
    myxml.onLoad = function(s) {
    if (s) {
       readxml();
    } else {
       t.text = "载入出错!";
    }
    };
    myxml.load("书费.xml");
    function readxml() {
    var root:XMLNode = myxml.firstChild;
    //声明根节点root
    var newnode1:Array = root.childNodes;
    //定位根节点下第一层子节点数组newnode1,相当于知道有几个年级。
    trace("第一层子节点数组是\n"+newnode1+"\n");
    var len1:Number = newnode1.length;
    //取得第一层子节点数组的长度。
    trace("第一层子节点数组长度是"+len1+"\n");
    var newnode2:Array = root.firstChild.childNodes;
    //定位在根节点的首个子节点的子集,然后取得子集的数组长度,如果每个同级节点子集数目一样的话,这样定位就可以了,如果子集数目不等,要定位到子集最多的那个。
    trace("第二层子节点数组是\n"+newnode2+"\n");
    var len2:Number = newnode2.length;
    //知道几种课本
    trace("第二层子节点数组长度是"+len2+"\n");
    var 书名:String = newnode2[0].attributes.书名;
    //测试一下,看看能否取得xml文档结构中的书名。
    trace("你所找的书名是"+"“"+书名+"”");
    //数学
    var ttt = newnode1[0].childNodes[1].firstChild;
    //测试一下,看看能否取得xml文档结构中的定价。
    trace("该书定价是"+ttt);
    //8
    for (i=0; i<len1; i++) {
       t.text += newnode1[i].attributes.年级+"\n";//输出年级
       for (j=0; j<len2; j++) {
        var ttt:String = newnode1[i].childNodes[j].firstChild.toString();
        if (ttt !== undefined) {//保证该位置有内容才输出,未定义内容则不输出。
         t.text += newnode1[i].childNodes[j].attributes.书名+":"+newnode1[i].childNodes[j].firstChild+"\n";
        //输出该年级的书名和定价
        }
       }
    }
    }
    输出:

  • 相关阅读:
    Python读excel——xlrd
    markdown demo 学习
    Markdown 语法介绍
    安全学习概览——恶意软件分析、web渗透、漏洞利用和挖掘、内网渗透、IoT安全分析、区块链、黑灰产对抗
    诺基亚 IoT安全白皮书
    北京Uber优步司机奖励政策(4月17日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月17日)
    百度、腾讯和阿里内部的级别和薪资待遇是什么样的?
    成都Uber优步司机奖励政策(4月16日)
    北京Uber优步司机奖励政策(4月16日)
  • 原文地址:https://www.cnblogs.com/hakuci/p/1897942.html
Copyright © 2011-2022 走看看