The TextReader::get_attribute methods return an empty string when the attribute does not exist. Unfortunately, this makes it difficult to distinguish between a non-existent attribute and one whose value is the empty string. And a similar issue exists for other methods which return strings.