public void StartElement( string name, string value, bool isEmptyElement ) { // 新しいNodeオブジェクトの生成と基本情報のセット Node node = new Node( OUTPUT_LOCATION ); node.Type = Node.NodeType.StartElement; node.Name = name; node.Value = value; // 深さレベル node.Level = stack.Count; // シリアルナンバー(通し番号) node.SerialNumber = serialBaseNum; serialBaseNum++; currentLevel++; numArray[currentLevel] += 1; for( int i = 0; numArray[i] != 0; i++ ) node.NodeNumber.Add( numArray[i] ); // Pathを作る pathtack.Push( node.Name ); foreach( string path in pathtack ) node.Path.Add( path ); // 自分自身をスタックにプッシュ(レベルを下げる) stack.Push( node ); // 情報をアウトプット node.Output(); // <Element /> タイプの処理 if( isEmptyElement ) { numArray[currentLevel + 1] = 0; currentLevel--; stack.Pop(); pathtack.Pop(); } #if DEBUG if( node.SerialNumber % 10000 == 0 ) Console.WriteLine( node.SerialNumber ); #endif }
public void GetAttribute( string name, string value ) { Node node = new Node( OUTPUT_LOCATION ); node.Type = Node.NodeType.Attribute; node.Name = name; node.Value = value; node.Level = stack.Count - 1; // SerialNumber node.SerialNumber = serialBaseNum; serialBaseNum++; // NodeNumber(動かさない) for( int i = 0; numArray[i] != 0; i++ ) node.NodeNumber.Add( numArray[i] ); // Path foreach( string path in pathtack ) node.Path.Add( path ); node.Output(); }
public void GetText( string name, string value ) { Node node = new Node( OUTPUT_LOCATION ); node.Type = Node.NodeType.Text; node.Name = name; node.Value = value; node.SerialNumber = serialBaseNum; serialBaseNum++; node.Level = stack.Count; currentLevel++; numArray[currentLevel] += 1; for( int i = 0; numArray[i] !=0; i++ ) node.NodeNumber.Add( numArray[i] ); // Path foreach( string path in pathtack ) node.Path.Add( path ); // 出力 node.Output(); // Textは単一ノードで完結していると考える(<Text />) numArray[currentLevel + 1] = 0; currentLevel--; }