`
lipbb
  • 浏览: 67598 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flex 中XML操作的一个陷阱

阅读更多
先来段代码
			//测试
			var xml1:XML =  
				<menu>
					<menuitem code="a"   lv="1"/>
					<menuitem code="b"   lv="2"/>
					<menuitem code="c"   lv="3"/> 
					<menuitem code="d"   lv="2" />
					<menuitem code="e"   lv="2" />
					<menuitem code="f"   lv="2" />
					<menuitem code="g"   lv="2" />
				</menu>;

			var xml2:XML = new XML("<menu>" + xml1.menuitem.(@lv == 1) + "</menu>");
			var xml3:XML = new XML("<menu>" + xml1.menuitem.(@lv == 2) + "</menu>");
			var xml4:XML = new XML("<menu>" + xml1.menuitem.(@lv == 3) + "</menu>");
		
			trace("////////////////////////////");
			trace("xml2 = " + xml2);
			trace("////////////////////////////");
			trace("xml3 = " + xml3);
			trace("////////////////////////////");
			trace("xml4 = " + xml4);

大家认为它应该输出什么?
实际的结果是:
////////////////////////////
xml2 =
////////////////////////////
xml3 = <menu>
  <menuitem code="b" lv="2"/>
  <menuitem code="d" lv="2"/>
  <menuitem code="e" lv="2"/>
  <menuitem code="f" lv="2"/>
  <menuitem code="g" lv="2"/>
</menu>
////////////////////////////
xml4 =

  怎么会是这个样子?难道1和3不行,只有2才行?或者说只有一条的数据不能匹配?为啥呢?把 new xml换成<menu/>.appendChild(xxx) 也不行!

加断点调试发现,确实匹配到了,但就是没显示出来!

后来终于明白:
这里用+连接xml就自动调用了toString()方法。由于单条xml的toString()输出的是空串(就是它的文本子节点),而多条xml也就是xmllist的toString()输出的是所有标签,所以导致了这个结果。

而要让xml输出标签需要用toXMLString()方法
改成 new XML("<menu>" + xml1.menuitem.(@lv == 1).toXMLString() + "</menu>");
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics