I have to get the values of "reading" and "value" elements of context
Person/Category/Group/ser.These values must be on condition
based,means I have to get the values of "reading" and "value" if
entity="abc" and value="1" , and entity= "def" and value="2" at the
Person/Category/Group/series/Key.

I have to get the values of "reading" and "value" elements of context
Person/Category/Group/ser.These values must be on condition
based,means I have to get the values of "reading" and "value" if
entity="abc" and value="1" , and entity= "def" and value="2" at the
Person/Category/Group/series/Key.

It is not clear to me which ser/reading and ser/value element you are
looking for as I don't see the relationship between the series/Key/Main
elements and those ser elements. Are you looking for all reading and
value elements if the document contains the Main elements meeting your
conditions on the attributes?

I am new to xml. I don't know how to write xpath for such a thing.

You need to learn about predicates which can be put into square brackets
e.g.
/Person/Category/Group
selects all Group elements with that path, then you can add a predicate
to filter them in square brackets e.g.
/Person/Category/Group[series/Key[Main[@entity = 'abc' and @value =
'1'] and Main[@entity = 'def' and @value = '2']]]
filters based on series/Key descendants for which another condition
holds, there is a Main child meeting your first attribute condition and
there is a Main child meeting the second attribute condition.
Then if you are looking for ser/reading desdendant elements of that
Group element you can add
/Person/Category/Group[series/Key[Main[@entity = 'abc' and @value =
'1'] and Main[@entity = 'def' and @value = '2']]]/ser/reading