Java 不使用解析器工具解析XML字符串

Java 不使用解析器工具解析XML字符串,java,string,xml-parsing,Java,String,Xml Parsing,我有以下字符串,它不是来自文件:它来自数据库: <?xml version="1.0" encoding="UTF-8" ?> <root> <person name="dave"> <job>teacher</job> <job>musician</job> </person> <person name="chris">

我有以下字符串,它不是来自文件:它来自数据库:

<?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>
当然,这个例子被简化了

我必须用基本的字符串函数手动解析它,例如:我不能使用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吗

谢谢,,
关于。

我将创建一个特殊的标记类,该类将标记名和所有属性存储为字段,并在数组或数组列表中引用其子标记。 然后将所有顶级标记放在它们自己的数组或数组列表中。从这里遍历所有
人和他们的子标签是小菜一碟。

这有家庭作业的味道,所以你会得到一个过于简化的、可能有缺陷的想法,你可以在闲暇时建立或忽略它。考虑使用堆栈来跟踪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“tag”就足够了。这一小段伪代码并不特别健壮,多行作业标记会破坏它,但只要有一点编程魔法,它就很容易处理。如果您被要求用JAVA创建一个可靠、健壮的xml解析器,那么您将面临一个漫长的夜晚。

为什么不需要使用xml解析器?不需要重新发明轮子,除非你只是为了教育。此外,你可以只使用内置的Java XML解析器,因此如果外部解析器有问题,这可以避免它,因为它使用JVM附带的解析器。我不明白为什么你不能使用XML解析器?是作业吗?好像已经是算法了!我当然只会在我准备好了person和jobs的时候才把person和jobs放在person和jobs中,但除此之外,你似乎走的方向是正确的。哦,至少对作业使用HashSet而不是ArrayList,除非作业需要排序。这使得查找某个特定工作的速度大大加快,例如查找所有教师。ArrayList在查找项目时速度很慢,我会随时查找HashMap和HashSet。您可以同样轻松地遍历它们。