'Gets all the subfields indicated by field_names.
This resolves specifications like "Users.special_folders.app_data" where for
each entry in the Users protobuf the corresponding app_data folder entry
should be returned.
Args:
fd: The base RDFValue or Array.
field_names: A list of strings indicating which subfields to get.
Yields:
All the subfields matching the field_names specification.'

def GetSubFields(self, fd, field_names):

    if isinstance(fd, rdf_protodict.RDFValueArray):
        for value in fd:
            for res in self._GetSubField(value, field_names):
                (yield res)
    else:
        for res in self._GetSubField(fd, field_names):
            (yield res)
