$ sed -e '1s/name/something/2'
-e '3s/name/somethingdifferent/2'
-e 's/password/somethingelse/2' sample.xml
sed -i -E "s/(<username>.+)name(.+</username>)/1something2/" file.xml
sed -i -E "s/(<username>.+)name(.+</username>)/1something2/" file.xml
This is, I think, what you're looking for.
Explanation:
parentheses in the first part define groups (strings in fact) that can be reused in the second part
1, 2, etc. in the second part are references to the i-th group captured in the first part (the numbering starts with 1)
-E enables extended regular expressions (needed for + and grouping).
-i enables "in-place" file edit mode
sed -e '/username/s/CDATA[name]/CDATA[something]/'
-e '/password/s/CDATA[password]/CDATA[somethingelse]/'
-e '/dbname/s/CDATA[name]/CDATA[somethingdifferent]/' file.txt