第十三章 Flash和XML集成开发
1. W3CDOM处理XML文档:
1> 新建XML文档xml.xml
2> 创建XMLDocument对象、解析文档:
import flash.xml.XMLDocument;
import flash.net.URLRequest;
import flash.display.Loader;
function xmlLoader(evt:Event):void{
var myDoc:XMLDocument = new XMLDocument();
myDoc.ignoreWhite= true;
myDoc.parseXML(myLoader.data);
varmyVar:String = myDoc.firstChild.firstChild.firstChild.firstChild.nodeValue;
trace(myVar);
}
var myXMLURL:URLRequest = newURLRequest("xml.xml");
var myLoader:URLLoader = newURLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE,xmlLoader);
2. 使用XMLNode对象处理XML文档:
注意:XMLNode是XMLDocument的基类,所以XMLNode的属性方法,后者同样可用!
1> Attributes集合:返回一个包含指定节点所有属性的对象。
var str:String = "广州";
var doc1:XMLDocument = newXMLDocument(str);
var node:String =doc1.firstChild.attributes.state;
trace(node);
或者:
var attrs:Object =doc.firstChild.attributes;
for(var prop in attrs){
trace(prop+"="+attrs[prop]);
}
2> childNodes集合:返回一个包含指定节点所有子节点的数组。
var node1:Array =doc1.firstChild.childNodes;
trace("3"+node1[0]);
3. 使用E4X处理XML:
1>用于实现E4X的AS类
var myXML:XML =
广州
济南
;
trace(myXML.area[0].toXMLString());
2>创建XML对象和XMLList对象:
vartagname:String = "area";
var attributename:String ="atate";
var attributevalue:String = "广东省";
var content:String = "广州";
var my:XML = <{tagname}{attributename}={attributevalue}>{content}{tagname}>;
trace(my.toXMLString());
3> 外部加载和Document一样
4> “.”子元素访问; ”..”后代访问; ”@”属性访问; ”*”通配符
4. 修改XML结构
myDoc.name[0].first= "1leverling";
对于命名空间:其实XML里的命名空间的作用与其它语言(如C#)中命名空间的作用差不多:为命名提供一个容器,只要在该容器中没有相同的命名就可以避免命名冲突。
5. 修改XML命名空间:
1>读取命名空间:
Xmlns:zhuozi=”heep://www.baidu.com”;
Var tableNs:Namespace = myXML.namespace(“zhuozi”);
2>增加/修改命名空间:
myXML.addNamespace(newNS);
myXML.table.setNamespace(newNS);
3> QName:限定
6. XMLSocket对象信息处理方法:
1> 当调用connect打开对服务器的TCP/IP连接并处于打开状态,直到一下情况之一发生!
XMLSocket对象close方法被调用
不再有XMLSocket对象参数存在
Flash Player退出
2> XMLSocket与安全:
只能够连接到端口号大于或者等于1024的TCP端口。同样子域进行访问,或者跨域文件!
3> 网页资料:
as3 的socket 读写数据方法常用的有四个:readUTF, writeUTF, readUTFBytes, writeUTFBytesjava的socket 输入输出流常用BufferedReader 和DataOutputStream 包装, 以提高读写效率
如:
BufferedReaderreader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
DataOutputStreamwriter = new DataOutputStream(socket.getOutputStream());
as3 方写数据时用writeUTFBytes 方法, 此时java 方读数据用reader.readLine()阻塞式方法.
as3 方写数据时用writeUTF方法, 此时java 方应改用DataInputStream 类包装输入流, 因为BufferedReader 不提供读取UTF数据的方法.
java 方写数据时用writeUTF方法, 此时as3 方读数据用readUTF方法, 但此种模式有个弊端, 就是如果java方连续调用了n(n >= 2)次writeUTF方法,而as3方因来不及读取, 则最后只是第一次写入的数据被读取.
java 方写数据时用writeBytes, 此时as3 方读数据用readUTFBytes方法读取数据, 可以这样读取: msg = socket.readUTFBytes(socket.bytesAvailable).