1

我想用这种格式在java中使用SAX解析器解析一个XML文件:

<Deals>
  <Deal>
   <id> 10</id>
   <title> title </title>
   <city>
     <id> 1 </id>
     ...
   </city>
  </Deal>
  ...
</Deals>

我在区分 Deal Node 的 id 元素和 city 节点的 id 元素时遇到了问题。

4

1 回答 1

5

您可以做的一件事(我已经看到并使用了它——我不确定它是最有效或最有效的方法,但它有效)是在解析器中维护一些状态,无论是定义的一组状态或一些布尔标志,用于描述您在文档中的位置。例如,您可能有:

boolean inDeals = false;
boolean inDeal = false;
boolean inCity = false;

然后,在您的 startElement 回调中,如果开始标记为Deals,则设置inDeals为 true。同样对于Dealcity。在 endElement 回调中,执行相反的操作(例如结束标记 == Deals,设置inDeals回 false)。在您的字符方法中,或者您正在处理标签,只需根据当时解析器的状态进行处理。例如:

if(inDeal) {
    if(inCity) {
        cityId = /*the characters*/;
    } else dealId = /*the characters*/;
}
于 2012-04-30T17:46:04.047 回答