ASP.NETはXMLのあるノードのすべてのデータを読み出してDataTableインスタンスに戻る

37531 ワード

ネット上にはASPがたくさんあります.NETがXMLを読み取る例としては、Datasetを使用して読み取るが、このチュートリアルではXMLノードの下のすべてのデータをXml Documentで読み取る.まず、このXMLフォーマット:SysRightsDbを見てみましょう.xml
XML Code [http://www.xueit.com]

 


    
      
<? xml version="1.0" encoding="utf-8" ?>
< root >
< rights name ="SYS" >
< xml name =" " code ="stockmarket" ></ xml >
< xml name =" " code ="sales" ></ xml >
< xml name =" " code ="servcice" ></ xml >
< xml name =" " code ="financial" ></ xml >
< xml name =" " code ="callcenter" ></ xml >
< xml name =" " code ="report" ></ xml >
</ rights >
< rights name ="financial" >
< xml name =" " code ="so_mana" ></ xml >
< xml name =" " code ="so_list" ></ xml >
< xml name =" " code ="so_audit_list" ></ xml >
< xml name =" " code ="so_ur_sour_list" ></ xml >
</ rights >
</ root >

 
 
このXMLから ると、ASPを います.NET み し システムにおけるノード はSYS のすべてのデータと しく,financialノード のすべてのデータを み す.
このXMLデータフォーマットは、 がはっきりしているように えますが、 た も くありません.
から めましょう.
1に、まず み しXMLクラスxmlHelplerを し、 は の りである.
まず2つのネーミングスペースを
 


コード#コード#

   
     
using System.Xml;
using System.Collections;

xmlHepler Code [http:
// www.xueit.com]

/// <summary>
/// :dodo
/// :www.xueit.com
///
/// XML
/// </summary>
/// <typeparam name="T"></typeparam>
public class xmlHepler < T > :System.Web.UI.Page
{
Hashtable table
= new Hashtable();
T FileName;
T Root;
//
T RootAttName; //
T RootAttValue; //
T Field; // Xml
/// <summary>
/// XML
/// </summary>
/// <param name="val"></param>
public xmlHepler(T val)
{
FileName
= val;
this .LoadXml(val.ToString());
}

/// <summary>
/// XML
/// </summary>
/// <param name="file"></param>
private void LoadXml( string file)
{
XmlDocument xdoc
= new XmlDocument();
xdoc.Load(file);
table.Add(
" xml " , xdoc);
}

/// <summary>
/// XML to DataTable
/// </summary>
/// <returns></returns>
public DataTable GetXmlToDataTable()
{
string [] SplitField = Field.ToString().Split( ' , ' );
// DataTable
DataTable dt = new DataTable();
DataColumn dc
= null ;
for ( int i = 0 ; i < SplitField.Length; i )
{
dc
= new DataColumn(SplitField[i]);
dt.Columns.Add(dc);
}
XmlDocument xdoc
= (XmlDocument)table[ " xml " ];
XmlNodeList xTable
= xdoc.DocumentElement.SelectNodes(Root.ToString());

foreach (XmlNode xnode in xTable)
{
if (xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString()) //
{
//
XmlNodeList xnlist = xnode.ChildNodes;
//
for ( int i = 0 ; i < xnlist.Count; i ) // for (int i = 0; i < xnode.ChildNodes.Count; i ) xml
{
DataRow dr
= dt.NewRow();
//
for ( int j = 0 ; j < SplitField.Length; j )
{
dr[SplitField[j]]
= xnode.ChildNodes[i].Attributes[SplitField[j]].Value;
}
dt.Rows.Add(dr);
}
}
}
return dt;
}

#region
/// <summary>
///
/// </summary>
public T xmlRoot
{
get { return Root; }
set { Root = value; }
}
/// <summary>
///
/// </summary>
public T xmlRootAttName
{
get { return RootAttName; }
set { RootAttName = value; }
}
/// <summary>
///
/// </summary>
public T xmlRootAttValue
{
get { return RootAttValue; }
set { RootAttValue = value; }
}

/// <summary>
///
/// </summary>
public T xmlSplitField
{
set { Field = value; }
}
#endregion
}

 
 
このxmlHelplerクラスはDocumentElementを しています.SelectNodesはXMLノードを し、if(xnode.Attributes[RootAttName.ToString()].InnerText == RootAttValue.ToString()は、 する のノードを する.
メソッドGetXmlToDataTable()を してDataTableを し、XMLノードの にあるすべてのデータをDataTableにインポートします.
このクラスのソースコードの なところはすべて を いて、とても です.
に、このような び し について します.
プログラムPage_Loadテスト び しSysRightsDb.xmlを し、 データを します.
ソースコードは のとおりです.
xmlHelpler Codeを び す[http://www.xueit.com]

 


    
      
protected void Page_Load( object sender, EventArgs e)
{
xmlHepler
< string > xml = new xmlHepler < string > (Server.MapPath( " SysRightsDb.xml " ));
xml.xmlRoot
= " rights " ;
// SYS
xml.xmlRootAttName = " name " ;
xml.xmlRootAttValue
= " SYS " ;
xml.xmlSplitField
= " code,name " ;
DataTable dt
= xml.GetXmlToDataTable();
Response.Write(
" <b> </b><br> " );
foreach (DataRow dr in dt.Rows)
{
Response.Write(
" name: " dr[ " name " ].ToString() " code: " dr[ " code " ].ToString());
Response.Write(
" <br> " );
}

// financial
xml.xmlRootAttName = " name " ;
xml.xmlRootAttValue
= " financial " ;
xml.xmlSplitField
= " code,name " ;
dt
= xml.GetXmlToDataTable();
Utils.Response(
" <b> </b><br> " );
foreach (DataRow dr in dt.Rows)
{
Response.Write(
" name: " dr[ " name " ].ToString() " code: " dr[ " code " ].ToString());
Response.Write(
" <br> " );
}
}

 
 
ええと、これまではXMLノードを び すデータを に できましたが、 に を てみましょう.
ASP.NET  XML         DataTable
チュートリアルは に くて、 く します!
dodo
http://www.xueit.com/html/2009-12-15/21-97718778265.html
の は と のITネットの に して、 を して、しかし の を ないで ずこの を しなければならなくて、しかも のリンクを します.そうでなければ、 を する を する.