public XmlNode InsertNode(XmlNode n, String shortName) {
Stack2 stack = SplitParts(shortName);
XmlDocument doc = n.OwnerDocument;
XmlNode n2 = null;
n = n.FirstChild;
for (int k = 0; k < stack.Count; ++k) {
String part = (String)stack[k];
int idx = part.LastIndexOf('[');
String name = part.Substring(0, idx);
idx = int.Parse(part.Substring(idx + 1, part.Length - idx - 2));
int found = -1;
for (n2 = n.FirstChild; n2 != null; n2 = n2.NextSibling) {
if (n2.NodeType == XmlNodeType.Element) {
String s = EscapeSom(n2.LocalName);
if (s.Equals(name)) {
++found;
if (found == idx)
break;
}
}
}
for (; found < idx; ++found) {
n2 = doc.CreateElement(name);
n2 = n.AppendChild(n2);
XmlNode attr = doc.CreateNode(XmlNodeType.Attribute, "dataNode", XFA_DATA_SCHEMA);
attr.Value = "dataGroup";
n2.Attributes.SetNamedItem(attr);
}
n = n2;
}
InverseSearchAdd(inverseSearch, stack, shortName);
name2Node[shortName] = n2;
order.Add(shortName);
return n2;
}