Разбор Android саксофон XML с несколькими родителями - PullRequest
0 голосов
/ 12 января 2012

Я пытаюсь проанализировать данные со страницы XML с помощью метода синтаксического анализа. Структура страницы XML:

<?xml version="1.0" encoding="UTF-8"?>
<news_magazine>
    <latest_news>
        <news>
            <category_id>5</category_id>
            <author>Super Admin</author>
        </news>
        <news>
            <category_id>6</category_id>
            <author>user</author>
        </news>
    </latest_news>
    <categories>
        <category>
            <category_id>5</category_id>
            <category_name>cricket</category_name>
        </category>
        <category>
            <category_id>5</category_id>
            <category_name>cricket</category_name>
        </category>
    </categories>
</news_magazine>

И тег новостей, и тег категории содержат идентификатор категории. Как можно отдельно взять идентификатор категории?

Ответы [ 2 ]

1 голос
/ 12 января 2012

Рассмотрите возможность использования привязки данных по вашему выбору и парсера. Эта задача не составит труда с (скажем) Xstream или Джексон. В случае, если вам действительно нравится делать это вручную, используйте pull parser (вы больше не получаете обратных вызовов, но активно извлекаете элементы) - это лучше адаптируется к потоку программ Java

1 голос
/ 12 января 2012

Эй, ты можешь сделать это очень простым способом.Просто поддерживайте дополнительную переменную, когда вы помещаете условия в анализатор, когда получаете какой-либо из тегов "news" или "category", чем присваиваете его в current_parent.а при сравнении тэга "category_id" чем также ставится условие current_parent

public static String current_parent;
public void startElement(String namespaceURI, String localName, 
            String qName, Attributes atts) {
    if (localName.equals("news") {
          current_parent = "news";
        // Do your code with news.
        return;
    }
    else  if (localName.equals("category") {
          current_parent = "category";
        // Do your code with category.
        return;
    }
     else  if (localName.equals("category_id") {
         if(current_parent.equals("category")
            {
        // Do your code with category's category_id.
             }else if(current_parent.equals("news")
               {
        // Do your code with news's category_id.
             }
        return;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...