If your client returns "Joe", I don't see how that code extracts just Joe, or >Joe.
if ( c =='<') {
readingName = true;
name = "";
}
Presumably, readingName is false until this code is executed. Hard to tell, since you post ALL of your code.
So, the arrival of the < sets a flag that says to store the characters that follow.
if (readingName) {
if (c != '>') {
name += c;
}
c contains '<', still, so it should be stored in name.
The characters "ame" are not '<' and not '>' (the only special characters), so they should be added to name, too.
Then, you read a '>' (at the end of ). It is a '>', so that if block is skipped, and the else portion is executed.
else {
readingName = false;
Serial.println(name);
lcd.setCursor(0,1);
lcd.print(name);
delay(1000);
}
I'd expect to see "ame" show up on the lcd for one second.
I think what you really need to do is store data starting when the '>' (at the end of ) arrives, and stop when the '/' (in ) arrives. Then, lop off the last character and display the rest.