2013-03-14 4 views
0

Я хочу сделать представление списка из ниже XML-файла:Многоуровневая XML с помощью SAX Parser

 <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. Установите флаг верно, когда StartElement() вызывается для проекта с именем атрибута, установленного в настольном приложении

  2. Установите тот же флаг ложным при StartElement() вызывается для a Проект с другим именем

  3. Пока флаг является истинным, а startElement() вызывается для элемента SubName, сохраните текстовое содержимое элемента в своем представлении списка.

+0

Я просто хочу знать, как работает метод startElement, я имею в виду поток этого метода? D.R. –

+0

Я думаю, вы не поняли SAX. Функция startElement() не вызывается один раз для всего документа, это не DOM. Функция startElement() вызывается много раз: один раз для каждого элемента в вашем XML! Поэтому вы должны сохранить состояние (то есть флаг, о котором я говорил в своем первоначальном ответе) в вашем обработчике, и следовать правилам, которые я описал. –

+0

Спасибо, очень мук человек !!! D.R. –