アットウィキロゴ

csharp_xmlpostordertraversal

指定したノード以下のXMLツリーを後順に走査して要素値を表示する


       /// <summary>
       /// 指定したノードの要素値を返す
       /// </summary>
       private static string getText(XmlNode node)
       {
           XmlNodeList childNodes = node.ChildNodes;
           string str = "";
           foreach (XmlNode child in childNodes)
           {
               if (child.NodeType == XmlNodeType.Text)
               {
                   str += child.Value;
               }
           }
           return str;
       }

       /// <summary>
       /// 指定したノード以下のXMLツリーを後順に走査して要素値を表示する
       /// </summary>
       private static void travers(XmlNode node)
       {
           XmlNodeList childNodes = node.ChildNodes;
           Regex theRegex = new Regex("\r|\n|\t| ");
           foreach (XmlNode child in childNodes)
           {
               if (child.NodeType == XmlNodeType.Element)
               {
                   travers(child);
               }
           }
           Console.WriteLine(theRegex.Replace(getText(node),""));
       }

       static void Main(string[] args)
       {
           XmlDocument doc = new XmlDocument();
           doc.Load("[[test]].xml");

           XmlElement root = doc.DocumentElement;
           XmlNodeList test = doc.ChildNodes;
           travers(test[1]);
       }

[test.xml]
       <?xml version="1.0" encoding="shift_jis"?>
       <chunk>
         渡した。
         <chunk>
           太郎は
         </chunk>
         <chunk>
           本を
           <chunk>
             持っている。
             <chunk>次郎が</chunk>
           </chunk>
         </chunk>
         <chunk>
           花子に
         </chunk>
       </chunk>

[出力結果]
       太郎は
       次郎が
       持っている。
       本を
       花子に
       渡した。
最終更新:2009年02月13日 16:03
添付ファイル