2013-03-14 132 views
0

我想要从下面的XML文件的列表视图:多级XML SAX解析器

 <Menu> 
    <Project name ="Desktop Application"> 
<name>Desktop Application</name> 
<Description>This is some text.</Description> 
<image>2130837532</image> 
    <Sub> 
     <SubName>PowerISO</SubName> 
     <SubDescription>This is some text.</SubDescription> 
     <SubImage>2130837555</SubImage> 
    </Sub> 
    <Sub> 
     <SubName>Microsoft Office</SubName> 
     <SubDescription>This is some text.</SubDescription> 
     <SubImage>2130837549</SubImage> 
    </Sub> 
    <Sub> 
     <SubName>Adobe Reader</SubName> 
     <SubDescription>This is some text.</SubDescription> 
     <SubImage> 2130837506 </SubImage> 
    </Sub> 
    <Sub> 
     <SubName>Vlc Player</SubName> 
     <SubDescription>This is some text.</SubDescription> 
     <SubImage>2130837587</SubImage> 
    </Sub> 
    <Sub> 
     <SubName>Picasa Photo Viewer</SubName> 
     <SubDescription>This is some text.</SubDescription> 
     <SubImage>2130837554</SubImage> 
    </Sub> 
    <Sub> 
     <SubName>KM Player</SubName> 
     <SubDescription>This is some text.</SubDescription> 
     <SubImage>2130837542</SubImage> 
    </Sub> 
    <Sub> 
     <SubName>Cricket</SubName> 
     <SubDescription>This is some text.</SubDescription> 
     <SubImage>2130837524</SubImage> 
    </Sub> 
</Project> 

等等,但我已经创建了一个主要项目,但点击的是一个后我要显示子根据主要项目的项目。 我无法创建第二个列表,它将根据主要项目显示子项目。 我已经使用SAX解析器完成了这项工作。 Plz帮助我做到这一点。

这是我的startElement()方法,我希望如果项目名称是桌面应用程序比桌面应用程序的子项目将显示在列表视图上。 我没有得到这个。 请帮助我!

 public void startElement(String uri, String localName, String qName, 
     Attributes attributes) throws SAXException { 
    // TODO Auto-generated method stub 

    currentElement = true; 

    if (qName.equals("Menu")) { 
     subList = new ArrayList<SubProjectInfo>(); 
    } else if (qName.equals("Project")) { 
     subProInfo1 = new SubProjectInfo(); 
     String gh = attributes.getValue("name"); 

回答

0
  1. 设置一个标志设置为true时的startElement()调用与属性名称的项目设置为桌面应用程序

  2. 设置相同的标志设置为false时的startElement()被调用一个具有其他名称的项目

  3. 只要标志为true并且为子名称元素调用startElement(),就可以将元素的文本内容保存到列表视图中。

+0

我只想知道startElement方法是如何工作的,我的意思是该方法的流程? D.R. – 2013-03-14 12:29:13

+0

我想你还没有理解SAX。 startElement()不会为整个文档调用一次,这不是DOM。 startElement()会被多次调用:一次对于XML中的每个元素!所以你必须在你的处理程序中保存状态(即我在最初的答案中谈到的那面旗帜),并遵循我描述的规则。 – 2013-03-14 12:31:33

+0

非常感谢你mucn男人! D.R. – 2013-03-14 12:56:58