XML Parser Android

1

У меня есть HTML файл huuge, что-то вроде этого:

<html>
 <head>

 </head>
 <body>
    <div id="wraper">
      <div id="..."> </div>
      <div id="..."> </div>
      <div id="..."> </div>
      <div class="col x8 black">
         <div class="sidebar"> 
          <script .../>
          <script .../>
          <div class="side-box last10">
           <h3 .../>
           <ul class="sidebarlist">
             <li class="fisrt"> Need this Text </li>
             <li> Need this Text too (1) </li>
             <li> Need this Text too (2) </li>
           </ul>
         </div>
      </div
    </div>
 </body>

Как я могу "перемещаться" в этом html файле, чтобы получить текст, который я хочу?

html->body->div#wraper->div#col x8 black-> div#side-vox last10-> ul#sidebarlist -> li#first

Для этой работы лучше DOM или SAX? (Я не являюсь носителем английского языка)

Теги:
dom
xml-parsing
sax

2 ответа

1
Лучший ответ

Вы считали XPath? Ваш псевдокод:

html->body->div#wraper->div#col x8 black-> div#side-vox last10-> 
    ul#sidebarlist -> li#first

... переводится непосредственно в следующее выражение XPath:

/html/body/div[@id='wraper']/div[@class='col x8 black']/
    div[@class='side-vox last10']/ul[@class='sidebarlist']/li[@class='fisrt']

Или, более лаконично (при условии, что структура в вашем примере является репрезентативной):

/html/body/div[1]/div[4]/div[1]/div[1]/ul[1]/li[1]

Информацию об использовании XPath на Android можно найти здесь:

  • 0
    Спасибо @lwburk. На Android 1.6 (я виноват, что я не t metioned if) I don нет XPath, но я читал о библиотеке, которая может делать это.
1

вы можете использовать XmlPullParser для этого. Пожалуйста, перейдите по нижеследующему коду:

  public void parsing(String str1) throws XmlPullParserException, IOException{
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();
        xpp.setInput( new StringReader (str1));
        int eventType = xpp.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            String str;
         if(eventType == XmlPullParser.START_DOCUMENT) {
            System.out.println("Start document");
         } else if(eventType == XmlPullParser.START_TAG) {
             str    =    xpp.getName();
             System.out.println("Start tag "+str);
             if(xpp.getName().equals("div")){
                 int attrCount    =    xpp.getAttributeCount();
                 if(attrCount != -1) {
                     for(int x=0;x<attrCount;x++) {
                         System.out.println("Attr Name= "+ xpp.getAttributeName(x));
                         System.out.println("Attr Value= "+ xpp.getAttributeValue(x));
                     }
                 }
            }
         } else if(eventType == XmlPullParser.END_TAG) {
             System.out.println("End tag "+xpp.getName());
         } else if(eventType == XmlPullParser.TEXT) {
             System.out.println("Value= "+xpp.getText());
         }
         eventType = xpp.next();
        }
       System.out.println("End document");
    }
  • 0
    В xpp.next () функция перестает работать (XMLPullParserExeption), но если я добавляю ее в try-catch и в функцию catch, я повторяю функцию, все отлично.
  • 0
    Этот метод медленный. Нет такого метода, как ` xpp.getChild("html").getChild("body").getValue(); ?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню