Whilst we can’t say for sure without the XML that’s being parsed, the usual reason for ‘getting blanks’ from
firstChild) is that there is a whitespace Text node between the parent’s start-tag and the node you are looking for:
<data> <![CDATA[ foo ]]> </data>
On an XML parser that retains CDATA sections, that’ll give the
data element three children: a Text node containing a newline and some spaces; the CDATASection node; and another Text node with a newline.
So you could take
childNodes, but it’s a bit fragile… in particular it would break for an XML parser that turns CDATA sections into text, where you’d get a single Text child containing
foo and all the whitespace. Probably better to take the
textContent of the
<data> element (except of course with fallback to
innerText for IE).