ASP.NETはXMLのあるノードのすべてのデータを読み出してDataTableインスタンスに戻る
37531 ワード
ネット上にはASPがたくさんあります.NETがXMLを読み取る例としては、Datasetを使用して読み取るが、このチュートリアルではXMLノードの下のすべてのデータをXml Documentで読み取る.まず、このXMLフォーマット:SysRightsDbを見てみましょう.xml
XML Code [http://www.xueit.com]
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ノードを び すデータを に できましたが、 に を てみましょう.
チュートリアルは に くて、 く します!
dodo
http://www.xueit.com/html/2009-12-15/21-97718778265.html
の は と のITネットの に して、 を して、しかし の を ないで ずこの を しなければならなくて、しかも のリンクを します.そうでなければ、 を する を する.