using System.Collections;
public static void Main()
XmlDocument doc = new XmlDocument( );
XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration( "1.0", "UTF-8", null );
XmlElement root = doc.DocumentElement;
doc.InsertBefore( xmlDeclaration, root );
XmlElement body = doc.CreateElement( string.Empty, "body", string.Empty );
XmlElement l1_1 = doc.CreateElement( string.Empty, "level1", string.Empty );
body.AppendChild( l1_1 );
XmlElement l2_1 = doc.CreateElement( string.Empty, "level2", string.Empty );
XmlText text1 = doc.CreateTextNode( "text 1" );
l2_1.AppendChild( text1 );
l1_1.AppendChild( l2_1 );
XmlElement l2_2 = doc.CreateElement( string.Empty, "level2", string.Empty );
XmlText text2 = doc.CreateTextNode( "other text 2" );
l2_2.AppendChild( text2 );
l1_1.AppendChild( l2_2 );
XmlElement l1_2 = doc.CreateElement( string.Empty, "level1", string.Empty );
body.AppendChild( l1_2 );
XmlElement l2_3 = doc.CreateElement( string.Empty, "level2", string.Empty );
XmlText text3 = doc.CreateTextNode( "text 3" );
l2_3.AppendChild( text3 );
l1_2.AppendChild( l2_3 );
XmlElement l2_4 = doc.CreateElement( string.Empty, "level2", string.Empty );
XmlText text4 = doc.CreateTextNode( "other text 4" );
l2_4.AppendChild( text4 );
l1_2.AppendChild( l2_4 );
XmlNode node = doc.DocumentElement;
Console.WriteLine("OK:" + (getNearestParent(text3, text4) == l1_2).ToString());
public static void listNode(XmlNode node, int level) {
Console.WriteLine( pad(level) + node.Name);
int nextlevel = level + 1;
foreach (XmlNode child in node.ChildNodes) {
listNode(child, nextlevel );
public static string pad(int level) {
System.Text.StringBuilder sb = new System.Text.StringBuilder();
public static XmlNode getNearestParent(XmlNode n1, XmlNode n2) {
ArrayList parents = new ArrayList();
while (current.ParentNode != null) {
parents.Add(current.ParentNode);
current = current.ParentNode;
while (current.ParentNode != null) {
if (parents.IndexOf(current) >= 0)
current = current.ParentNode;