Resulta que "valor3" no tiene hijos. Cuando haces
Código:
vari.getElementsByTagName("valor1")[0].firstChild.data;
te devuelve la cadena "Si" porque "valor1" tiene un hijo, un nodo de texto. Entonces los nodos de texto tienen la propiedad
data, que es el texto que contienen.
Al no haber nodo hijo (ni siquiera de texto al no contener ni un espacio), no contiene propiedad
data (ni siquiera sé que ocurre si sólo haces
firstChild, dará undefined?).
Bueno el caso es que hay métodos DOM como hasChildNodes() o childNodes.length para averiguar si hay o no hijos. Deberás mirarlo antes. Lo que quieras devolver en ese caso ya es cosa tuya (false, cadena vacía, null...).
Un saludo.