I think your answer in your question is: "I really want to canonize one node, but as you can see in the output file, the output does not contain any internal xml."
If I understand you, then you really do not want to canonize a single node, or you would be happy that it does not contain internal XML. You want to canonize one subtree .
XPath returns nodes, not subtrees. Some operations on nodes returned by an XPath expression will include their child and attribute nodes by default, but canonicalization is not intentionally one of them, since potentially some of these same child nodes may be mutable in ways that you do not sign. When signing, you sign exactly those nodes that, as you say, sign.
Changing a line in your code:
XmlNodeList nodeList = xDoc.SelectNodes("//Child1");
in
XmlNodeList nodeList = xDoc.SelectNodes("//Child1/descendant-or-self::node()|//Child1//@*");
So I get the following in child1.xml:
<Child1 xmlns:test="http://www.test.com/xades#" Attribute1="c1" Bttribute="c2" Cttribute="c3">
 <child11 Attribute11="c11">Element11</child11>
 </Child1>
Do I think that this is what you want?
By the way, more accuracy along the lines:
XmlNodeList nodeList = xDoc.SelectNodes("//Child1[1]/descendant-or-self::node()|//Child1[1]//@*");
It may be useful, because then the xpath evaluation may stop when it falls in the first </Child1> , with an increase in performance, which can be significant if your real data is large.