2011-12-22 124 views
1

我有以下字符串(它不是來自一個文件:它來自DB):一個XML字符串解析沒有解析器工具

<?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) 
} 

這是我想要的alogrithm落實到位。

任何人都可以幫助我將該算法轉換成Java?

謝謝, 問候。

+3

爲什麼要求不使用xml解析器?除非你只是爲了教育,否則不需要重新發明輪子。 – 2011-12-22 21:06:46

+1

另外,您可以使用內置的Java XML解析器,因此,如果「外部」解析器出現問題,則可以避免它,因爲它使用與JVM捆綁在一起的解析器。 – Michael 2011-12-22 21:13:01

+0

我不明白爲什麼你不能使用XML解析器?這是一項功課嗎? – 2011-12-22 21:14:18

回答

0

我會創建一個特殊的標記類,它將標記名和所有屬性存儲爲字段以及對數組或列表中對其子標記的引用。 然後把所有的頂級標籤放在他們自己的數組或列表中。從這裏遍歷所有 人員和他們的子標籤是一塊蛋糕。

+0

ArrayLists在查找項目時速度很慢,我會隨時去做HashMap和HashSet。您可以輕鬆地遍歷它們。 – 2011-12-22 21:18:44

0

這樣的家庭作業氣味,所以你會得到一個過於簡化,可能borked的想法,你可以建立或忽略你的閒暇時間。考慮使用堆棧來跟蹤您在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中創建一個穩定可靠的xmlparser,那麼在您之前有一個漫長的夜晚。