mxml组件元素提取

来源:互联网 发布:大富豪web源码 论坛 编辑:程序博客网 时间:2024/05/20 19:49

   开发快速平台的需要我们解析mxml组件,虽然可以把mxml的文件当xml文件解析,但是还是与一般的xml解析存在这差

异。现在我主要讲解下我在解析mxml一些思路。

  开始时我也是当xml文件来解析,但是碰到了很多问题,我用的是dom4j。部分代码如下:(错误做法)

for (Iterator iteriner =root.elementIterator(); iteriner.hasNext();-) {Element element=(Element) iteriner.next();if(element.attributeIterator().equals("Label")){Attribute textAttr=element.attribute("text");if(textAttr.getValue()/!=null){String text=textAttr.getValue(); if(text/!=null&&text.equals("")){hm.put(element.getName()+textAttr.getName(), text);        }       }    }    if(element.getName().equals("Tree"))    {     Attribute idAttr=element.attribute("id");        Attribute dataAttr=element.attribute("dataProvider");     if(idAttr.getValue()!=null)     {      String id=idAttr.getValue();      String data=dataAttr.getValue();      if(id!=null&&id.equals("")&&data!=null&&data.equals(""))      {        hm.put(element.getName()+idAttr.getName()+dataAttr.getName(), id+data);       }          }    }    }      } catch (DocumentException e){    // TODO Auto-generated catch block    e.printStackTrace();   }  }

最后发现是由于有命名空间的问题,当我使用QName解析了命名空间时,又发现所有的mxml是有前缀<mx:的。最后我不

得不另外有其他的办法。代码如下:

document = saxReader.read(new File(filename));Element root = document.getRootElement();QName qname = root.getQName();for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {Element element = (Element) iterator.next();QName qname1 = element.getQName();//System.out.println(qname1.getQualifiedName());for (Iterator iterator2 = element.attributes().iterator(); iterator2.hasNext();) {Attribute attribute=(Attribute) iterator2.next();&nbsp;&nbsp;&nbsp;str.add(attribute.getText());

 

结果成功解析了mxml所有的组件信息。但是对于动态传文件名给read方法(肯定是不能写死)也让我很不爽,插件开发不
能直接调用file.getpath()等方法(图片也不行),必须依靠activator这个类的方法。也可以写事件对用户点击鼠标的事件

 

进行监听。反正目标是实现对用户选择的mxml文件动态解析。
原创粉丝点击