以前寫過一個操作XML的相關類。其中有一段是讀取節點值的。
下面代碼:
[ASP.net]XML操作相關        public DataView GetData(string XmlPathNode)
{
[ASP.net]XML操作相關            
//Get XML Date,return DataView
[ASP.net]XML操作相關
            try
{
[ASP.net]XML操作相關                StringReader read 
= new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
[ASP.net]XML操作相關                ds.ReadXml(read);
[ASP.net]XML操作相關            }

[ASP.net]XML操作相關            
catch
{
[ASP.net]XML操作相關                objError.ProgramError();
[ASP.net]XML操作相關            }

[ASP.net]XML操作相關            
if ( ds.Tables.Count == 0 )
{
[ASP.net]XML操作相關                
return new DataView();
[ASP.net]XML操作相關            }

[ASP.net]XML操作相關            
return ds.Tables[0].DefaultView;
[ASP.net]XML操作相關        }

此方法是讀取XML數據中指定節點及值。後來在一位朋友改寫了下代碼:
[ASP.net]XML操作相關        public DataView GetData(string XmlPathNode)
{
[ASP.net]XML操作相關            
//Get XML Date,return DataView
[ASP.net]XML操作相關
            try
{
[ASP.net]XML操作相關
//                System.IO.StringReader read = new System.IO.StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
[ASP.net]XML操作相關
                XmlNodeList xnl = objXmlDoc.GetElementsByTagName(XmlPathNode);
[ASP.net]XML操作相關                System.Text.StringBuilder strXml 
= new System.Text.StringBuilder();
[ASP.net]XML操作相關                strXml.Append( 
"<?xml version='1.0' ?><root>" );
[ASP.net]XML操作相關                
for (int i=0; i<xnl.Count; i++)
{
[ASP.net]XML操作相關                    strXml.Append( xnl[i].OuterXml );
[ASP.net]XML操作相關                }

[ASP.net]XML操作相關                strXml.Append( 
"</root>" );
[ASP.net]XML操作相關                System.IO.StringReader read 
= new System.IO.StringReader( strXml.ToString() );
[ASP.net]XML操作相關                ds.ReadXml(read);
[ASP.net]XML操作相關            }

[ASP.net]XML操作相關            
catch
{
[ASP.net]XML操作相關                
//
[ASP.net]XML操作相關
            }
[ASP.net]XML操作相關            
return ds.Tables[0].DefaultView;
[ASP.net]XML操作相關        }

此方法是讀取所有XmlPathNode節點及值,重新生成一個XML,返回DataView。

兩方法的區別在於:前者讀取指定節點,後者是讀所有節點。

相关文章: