20100615 学习记录:Empty Element

在用XmlTextReader遍历读取xml各个结点的时候,因为需要记录下来所有text值对应的结点顺序,所以要相应记录结点的进出栈。

初始测试一切正常,后来发现如果xml中间有自关自闭的空结点的话XmlTextReader只把它作为普通element读入,这样的话,因没有读到空结点的endElement而会导致后面所有存储的结点顺序错位。

检查了一下 XmlTextReader的方法和属性,发现里面有个IsEmptyElement。试了一下果然酱紫就ok了!!

うれしい!!!!ゲロゲロゲロ~~ XDDD~

 

while  (reader.Read())  // read node
            {
                
switch  (reader.NodeType)
                {
                    
case  XmlNodeType.Element:

                        
bool  endTagFlag  =   false ;
                        
if  (reader. IsEmptyElement)
                        {
                            endTagFlag  =   true ;
                        }

                        
string  tempNode  =  reader.Name;
                        
while  (reader.MoveToNextAttribute())
                        {
                            attributePama.Length  =   0 ;

                            attributePama.Append(tempNode);
                            attributePama.Append( " ( " );
                            attributePama.Append(reader.Name);
                            attributePama.Append( " ) " );

                            PushValue( " ATTRIBUTE " , attributePama.ToString(), reader.Value);                            
                        }

                        
if  ( ! endTagFlag)
                        {
                            alNode.Add(tempNode);
                        } 

                        
break ;

                    
case  XmlNodeType.Text:

                        PushValue( " TEXT " "" , reader.Value); 

                        
break ;

                    
case  XmlNodeType.EndElement:
                        alNode.RemoveAt(alNode.Count  -   1 );
                        
break ;


你可能感兴趣的:(element)