Ich habe inzwischen eine work-around Lösung gefunden:
Wenn man statt .text das .xml property verwendet, erhält man den kompletten Inhalt des Elementes, inkl aller Childknoten und Leerelemente. Allerdings hat man dann auch den Elementname inkl. des Ende-tags. Die lösche ich raus und habe damit den gewünschten Inhalt.
If z.nodename = "descr" Then ' Das Element "descr" möchte ich haben
If z.hasChildNodes Then ' Hat das Element Kinder?
txtDescr = z.xml ' Element mit Kinder, dann mit .xml lesen
' Ende-tag löschen
txtDescr = Replace(txtDescr, "</descr>", "")
' Anfangs-tag löschen
txtDescr = Right(txtDescr, Len(txtDescr) - InStr(txtDescr, ">"))
Else
txtDescr = z.text ' Element ohne Kinder, dann mit .text lesen
End If
End If