Try to use the XPath expression
//table[@class='tableForContent']//*[normalize-space(text()) != '']
which should give all nodes containing a non-all-whitespace text.
EDIT
The solution above splits formatted <td>
entries into several nodes which is not what you want. So, in fact your original XPath seems to be the right approach as far as the level of granularity is concerned.
The following XPath
//table[@class='tableForAppContent']//td[* or normalize-space(text()) != '']
gives you the "right" <td>
entries, which is to say, only those that contain text themselves or at least one child node which should result in all non-empty nodes.
However, the result node set consists of nodes with a sub structure which means that they contain both text nodes and children with text nodes. Since you use these result node sets as the interface between XPath and the calling routine (in Objective C?) you will probably have to extract the text elements from this sub tree yourself and concatenate them. Maybe there are library routines that you could use for that. If not, you can always do it by recursively traversing the result node trees.