1

I want to parse an XML file using SAX parser in java with this format :

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

I have a problem to distinguish between the id element of Deal Node and the id element of the city node.

1 Answer 1

5

One thing you can do (I've seen it around and used it -- I'm not certain it's the most efficient or effective way, but it works) is to maintain some state in your parser, whether that be a defined set of states, or some boolean flags, that describe where you are in the document. For example, you might have:

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

Then, in your startElement callback, if the start tag is Deals, set inDeals to true. Similarly for Deal and city. In the endElement callback, do the inverse (e.g. end tag == Deals, set inDeals back to false). In your characters method, or however you're processing the tag, just handle based on the state of the parser at that time. For example:

if(inDeal) {
    if(inCity) {
        cityId = /*the characters*/;
    } else dealId = /*the characters*/;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.