我想使用以下格式在Java中使用SAX解析器解析XML文件:
<Deals>
<Deal>
<id> 10</id>
<title> title </title>
<city>
<id> 1 </id>
...
</city>
</Deal>
...
</Deals>
我有一个问题是要区分Deal Node的id元素和city节点的id元素。
答案 0 :(得分:5)
你可以做的一件事(我已经看到它并使用它 - 我不确定它是最有效或最有效的方法,但它有效)是在你的解析器中保持一些状态,无论是定义的状态集或一些布尔标志,用于描述您在文档中的位置。例如,您可能有:
boolean inDeals = false;
boolean inDeal = false;
boolean inCity = false;
然后,在startElement回调中,如果开始标记为Deals
,请将inDeals
设置为true。同样适用于Deal
和city
。在endElement回调中,执行反向操作(例如,结束标记== Deals
,将inDeals
设置为false。在您的characters方法中,或者您正在处理标记时,只需根据当时解析器的状态进行处理。例如:
if(inDeal) {
if(inCity) {
cityId = /*the characters*/;
} else dealId = /*the characters*/;
}