Анализ строки XML без инструментов синтаксического анализа - PullRequest
1 голос
/ 23 декабря 2011

У меня есть следующая строка (она не из файла: она из базы данных):

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <person name="dave">
        <job>teacher</job>
        <job>musician</job>
    </person>
    <person name="chris">
        <job>farmer</job>
    </person>
</root>

Конечно, пример упрощен.

Я должен разобрать его "вручную" с помощью базовых функций String (например: я не могу использовать анализаторы XML).

Я создал HashMap:

HashMap<String,ArrayList> personsAndJobs = new HashMap<String,ArrayList>

Но я не могу найти хороший алгоритм, который может хранить данные следующим образом:

for each "person" tag {
   // put the "name" attribute in a HashMap 
   personsAndJobs.put(person.get("name"),null) 
   jobs = new ArrayList<String>();
   for each "job" of that person{
       jobs.add(job.getTagContent())
   }
   personsAndJobs.put(person.get("name"),jobs) 
}

Это алогритм, который я пытаюсь поставить на место.

Может ли кто-нибудь помочь мне перевести этот алгоритм на Java?

Спасибо, Привет.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

Это пахнет домашней работой, так что вы получите слишком упрощенную, вероятно, ошибочную идею, на которой вы можете опираться или игнорировать на досуге. Попробуйте использовать стек, чтобы отслеживать, где вы находитесь в документе XML.

push root tag
While(stack is not empty)
    read tag
    if close tag
        pop tag, continue
    if person
        push tag onto tag stack
        get name, create person, add to persons stack, continue
    if job
        push tag onto tag stack
        get job, add job to person on top of the stack.
        pop tag

Чтобы выяснить, какой тег обычно не слишком сложен, достаточно использовать string.contains («тег»). Этот небольшой кусочек псевдокода не особенно надежен, многострочные теги заданий его сломают, но с небольшим волшебством программирования, с ним достаточно легко справиться. Если вас попросят создать надежный и надежный xmlparser в JAVA, у вас впереди долгая ночь.

0 голосов
/ 23 декабря 2011

Я бы создал специальный класс тегов, который хранит имя тега и все атрибуты в виде полей плюс ссылки на его дочерние теги в массивах или списках массивов. Затем поместите все теги верхнего уровня в свой собственный массив или список массивов. Отсюда перебирая все люди и их подтеги - это кусок пирога.

...