You are on page 1of 23

X l XML trong lp trnh C# .

NET

K 1
M MT TI LIU XML


m mt ti liu XML, bn cn s dng lp XmlDocument. Lp XmlDocument cho
php bn m ti liu XML theo 3 cch thng dng sau:
-Bn c th m thng qua 1 ng dn trn cng, mt URL, hoc 1 tp tin XML.
-Bn c th s dng i tng stream nh FileStream cha d liu ca ti liu XML.
-Bn c m thng qua 1 chui cha XML trong b nh

thy c cc c tnh ny, trong k 1 ny, chng ta cng lm th 1 ng dng
nh nh con th nh:




ng dng ca chng ta bao gm: 3 radio button cho vic chn ni cha ti liu m
lp XmlDocument s m. 1 textbox dng nhp ng dn n tp tin xml, hoc
URL hoc 1 string cha chui XML. Cui cng l 1 button dng thc thi cc cu
lnh m ti liu. Sau y l on code th l tnh hung Click ca button:
Visual C# Code:
La chn code | n/Hin code
private void Button1_Click(object sender, System.EventArgs e)
{
try {
string path = TextBox1.Text;
XmlDocument document = new XmlDocument();
if (RadioButton1.Checked == true) {
document.Load(path);
}
if (RadioButton2.Checked == true) {
System.IO.FileStream fs;
fs = System.IO.File.OpenRead(path);
document.Load(fs);
}
if (RadioButton3.Checked == true) {
document.Load(path);
}
MessageBox.Show("M ti liu XML thnh cng!");
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}


on code trn to 1 th hin ca lp XmlDocument. Lp ny c 2 phng thc quan
trng l: Load() v LoadXml(). Nh bn thy, cc i s m phng thc Load()
nhn c th l: 1 chui cha URL cha ti liu xml, hoc 1 stream, hoc 1 chui
cha ti liu XML.
y, c iu cn lu vi cc bn l: nh imports namespace: System.Xml nh, v
y chnh l namespace cha class XmlDocument, v l 1 trong cc namespace ch
lc ca .NET h tr lm vic vi XML.

tin cho mi ngi thc hnh, mnh up ln y: 1 file xml thc hnh
(employees.xml), v m ngun ca chng trnh u tin ny.+
K 2
DI CHUYN XUYN QUA TI LIU XML


Mt ti liu XML bao gm 1 hoc nhiu nt, v c nhng nt nm bn trong nt
khc. Nhng nt nm bn trong nt khc gi l nt con.
Lp XmlNode c 1 tp hp gi l ChildNodes m cha danh sch tt c cc nt con
ca mt nt bt k. Ngoi ra, chng cn c cc thuc tnh: ParentNode, FirstChild,
LastChild, NextSibling v PreviousSibling m cho php bn di chuyn n bt k nt
no. Nh thuc tnh ParentNode gip bn di chuyn n nt cha ca 1 nt no ,
hoc thuc tnh NextSibling gip bn di chuyn n nt k tip cng cp ca nt
hin hnh.

K ny, chng ta cng th lm 1 project nh:


ng dng ca chng ta ch c 1 treeview. Mc ch ca chng ta l hin th cu trc
ca tp tin XML ln treeview lc chng trnh c Load ln.
Visual C# Code:
La chn code | n/Hin code
private void Form1_Load(object sender, System.EventArgs e)
{
string path = Application.StartupPath + "\\employees.xml";
XmlDocument document = new XmlDocument();
document.Load(path);
TreeNode rootnode =
TreeView1.Nodes.Add(document.DocumentElement.Name);
XmlNodeList nodes = document.DocumentElement.ChildNodes;
foreach (XmlNode childnode in nodes) {
TreeNode empNode = new TreeNode(childnode.Name + ":" +
childnode.Attributes("employeeid").Name + "=" +
childnode.Attributes("employeeid").Value);
foreach (XmlNode node in childnode.ChildNodes) {
if (node.Name == "firstname") {
empNode.Nodes.Add("First Name:" + node.InnerText);
}
if (node.Name == "lastname") {
empNode.Nodes.Add("Last Name:" + node.InnerText);
}
if (node.Name == "homephone") {
empNode.Nodes.Add("Home Phone:" + node.InnerText);
}
if (node.Name == "notes") {
empNode.Nodes.Add("Notes:" + node.InnerText);
}
}
rootnode.Nodes.Add(empNode);
}
}

Lu : Nh import namespace System.Xml

on code to 1 th hin ca lp XmlDocument v np tp tin employees.xml c
t trong cng th mc ca file thc thi ca chng trnh. Nt gc ca ti liu xml c
th c truy cp thng qua thuc tnh DocumentElement ca i tng th hin ca
lp XmlDocument. Thuc tnh Name ca DocumentElement tr v tn ca nt gc
ny (employees).

Nt employees cha 3 nt employee, truy cp 3 nt ny, ta dng thuc tnh
ChildNodes ca DocumentElement m ta ni trn. T dng vng lp foreach
i ln lt qua tng nt employee mt.

truy cp attribute employeeid, ta s dng collection Attribute ca lp XmlNode.
Bn c th xc nh attribute no cn ly thng qua ch mc hoc tn ca n.
nhn c chui nm gia 1 cp tag, ta dng thuc tnh InnerText ca XmlNode.
K 3
NHN CC PHN T BT K BNG CCH S DNG PHNG THC
GetElementByTagName()

Lp XmlDocument c phng thc GetElementByTagName() gip bn tm ra nhng
node c tag do bn ch nh. Chng hn, trong employees.xml c 3 nt employee.
Mnh nhp chui "employee" th n s tr v cho mnh 3 nt ny d dng. Cng lm
th 1 ng dng vi mnh nh!



ng dng ca chng ta gm 1 textbox nhp tn tag cn ly, 1 listbox hin thi
danh sch cc nt c tag tm c, 1 textbox hin th ni dung ca nt . V 1
button thc thi cu lnh dng ly nt thng qua tn tag.

Trc khi th l, tnh hung Click ca button, bn cn khai bo 1 bin thnh vin ca
class nh sau:
PHP Code:
XmlNodeList nodelist;

XmlNodeList l 1 class dng cha 1 tp hp cc lp. (ta ging thng ArrayList
thi). Khng c g phi quan trng, ngh xa xi v n :-D

By gi mi n lc th l tnh hung Click ca button n:
Visual C# Code:
La chn code | n/Hin code
private void Button1_Click(object sender, System.EventArgs e)
{
//lm sch listbox
ListBox1.Items.Clear();
//m ti liu XML
XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + "\\employees.xml");
//a tt c cc nt tm c qua tn tag
//vo nodelist
nodelist = doc.GetElementsByTagName(TextBox1.Text);
//i ln lt qua tng node cuaa nodelist
//v a n vo listbox
foreach (XmlNode node in nodelist) {
ListBox1.Items.Add(node.Name);
}
}


By gi, mi ln ngi dng chn 1 tn nt trn listbox th gi tr ca nt s c
hin th trn textbox kia th ta cn th l tnh hung SelectedIndexChanged ca
listbox:
Visual C# Code:
La chn code | n/Hin code
private void ListBox1_SelectedIndexChanged(object sender,
System.EventArgs e)
{
TextBox2.Text = nodelist(ListBox1.SelectedIndex).InnerText;
}
K 4
CHN NHIU NT BT K BNG CCH S DNG PHNG THC
SelectNodes()

Lp XmlDocument c phng thc SelectNodes() m chp nhn 1 chui cha cu
truy vn tm lc ra nhng nt m bn mun, n s tr v i tng XmlNodeList
cha danh sch tt c cc nt tha mn iu kin truy tm.
hiu r phng thc ny, chng ta cng lm th 1 ng dng nh:



ng dng ca chng ta bao gm:
-1 textbox in tn ca 1 ngi no
-2 radio button: 1 chn tm kim theo tn, 1 chn tm kim theo h.
-2 button
-10 textbox
-1 combobox hin th m nhn vin (employeeid) tng ng vi ng nhn vin
m bn tm.

Trc khi th l cc tnh hng, bn lm:
-Imports System.Xml
-Khai bo 1 bin thnh vin:
Dim nodelist As XmlNodeList
-Th l tnh hung Click ca nt Tm:
Visual C# Code:
La chn code | n/Hin code
private void Button1_Click(object sender, System.EventArgs e)
{
//m tp tin employees.xml
XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + "\\employees.xml");
//nu chn radio button "Tn"
if (RadioButton1.Checked == true) {
//chn phn t employee no
//m c ng con firstname no = <textbox1.Text>
//tr v cc nt employee hp l vo bin nodelist
nodelist =
doc.SelectNodes("/employees/employee[./firstname/text() = '" +
TextBox1.Text + "']");
}
//nu chn radio button "H"
if (RadioButton2.Checked) {
//chn phn t employee no
//m c ng con lastname no = <textbox1.Text>
//tr v cc nt employee hp l vo bin nodelist
nodelist =
doc.SelectNodes("/employees/employee[./lastname/text() = '" +
TextBox1.Text + "']");
}
//i xuyn qua cc nt employee
//ca tp hp cc nt employee va tm c trn
foreach (XmlNode node in nodelist) {
ComboBox1.Items.Add(node.Attributes("employeeid").Value);
}
ComboBox1.SelectedIndex = 0;
}


on code tn khng c g ng phi bn nhiu, duy cu truy vn l ng bn, bn
c hnh dung bn tm 1 nt thng qua 1 ng dn khi pht t nt ngun ca ti
liu (employees).
/employees/employee[./firstname/text() = '" + TextBox1.Text + "']"
Nhu vy, ta dch cu truy vn ny nh sau: hy cho ti cc nt employee m c
firstname = 1 tn ch nh trong textbox1.
Hm text() l hm tr v on text ca 1 nt ( y l nt firstname).
Bn lu l n s tr v cc nt employee, ch khng phi cc nt firstname hay
lastname g u nh.

Lc ny, nu tm c cc nt tha iu kin, user s chn m s nhn vin trong
combobox, v nhn nt Hin th cho bit cc thng tin ca nhn vin ng vi
m s nhn vin . Vy, ta c on code th l tnh hung Click ca nt Hin th
nh sau:
Visual C# Code:
La chn code | n/Hin code
private void Button2_Click(object sender, System.EventArgs e)
{
//label FirstName = gi tr nm gia cp tag
<firstname>...</firstname>
Label8.Text =
nodelist(ComboBox1.SelectedIndex).ChildNodes(0).InnerText;
//label LastName = gi tr nm gia cp tag
<lastname>...</lastname>
Label9.Text =
nodelist(ComboBox1.SelectedIndex).ChildNodes(1).InnerText;
//label HomePhone = gi tr nm gia cp tag
<homephone>...</homephone>
Label10.Text =
nodelist(ComboBox1.SelectedIndex).ChildNodes(2).InnerText;
//label notes = gi tr nm gia cp tag <notes>...</notes>
Label11.Text =
nodelist(ComboBox1.SelectedIndex).ChildNodes(3).InnerText;
}
K 5
CHN MT NT BT K BNG CCH S DNG PHNG THC
SelectSingleNode()


k 4, bn c bit qua chc nng ca phng thc SelectNodes() ca class
XmlDocument, nhng cng c nhiu lc bn ch mun chn mt nt m thi. Tt
nhin l vn c th dng SelectNodes(), tuy nhin c v khng hp l lm. Bi th,
class XmlNode cn cung cp cho bn phng thc SelectSingleNode() cho vic chn
1 nt.
d dng theo di, mnh post li ni dung ca tp tin employees.xml:
XML Code:
La chn code | n/Hin code
<?xml version="1.0" encoding="utf-8" ?>
<!-- This is list of employees -->
<employees>
<employee employeeid="1">
<firstname>Nancy</firstname>
<lastname>Davolio</lastname>
<homephone>(206) 555-9857</homephone>
<notes>
<![CDATA[includes a BA in psychology from Colorado State
University in She also completed "The Art of the Cold Call." Nancy is a
member of Toastmasters International.]]>
</notes>
</employee>
<employee employeeid="2">
<firstname>Andrew</firstname>
<lastname>Fuller</lastname>
<homephone>(206) 555-9482</homephone>
<notes>
<![CDATA[Andrew received his BTS commercial in 1974 and a Ph.D.
in international marketing from the University of Dallas in He is
fluent in French and Italian and reads German. He joined the company as
a sales representative, was promoted to sales manager in January 1992
and to vice president of sales in March Andrew is a member of the Sales
Management Roundtable, the Seattle Chamber of Commerce, and the Pacific
Rim Importers Association.]]>
</notes>
</employee>
<employee employeeid="3">
<firstname>Janet</firstname>
<lastname>Leverling</lastname>
<homephone>(206) 555-3412</homephone>
<notes>
<![CDATA[Janet has a BS degree in chemistry from Boston College
(1984). She has also completed a certificate program in food retailing
management. Janet was hired as a sales associate in 1991 and promoted
to sales representative in February 1992.]]>
</notes>
</employee>
</employees>


V d minh ha ca k ny: chng ta s sa i 1 cht xu v d minh ha k 4, v
n gin SelectSingleNode() cng ko khc chi my so vi SelectNodes(). Bn ch cn
sa li oan code nhng phn sau:
- Thay th bin thnh vin:
PHP Code:
XmlNodeList nodeList;

bng bin thnh vin ny:
PHP Code:
XmlNode nodeSelect;

- Thay th on m th l tnh hung Click ca nt "Tm" bng on m mi ny:
Visual C# Code:
La chn code | n/Hin code
private void Button1_Click(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + "\\employees.xml");
if (RadioButton1.Checked == true) {
nodeSelect =
doc.SelectSingleNode("/employees/employee[./firstname/text() = '" +
TextBox1.Text + "']");
}
if (RadioButton2.Checked) {
nodeSelect =
doc.SelectSingleNode("/employees/employee[./lastname/text() = '" +
TextBox1.Text + "']");
}
if (nodeSelect != null) {

ComboBox1.Items.Add(nodeSelect.Attributes("employeeid").Value);
}
ComboBox1.SelectedIndex = 0;
}


-Thay th on m th l tnh hung Click ca nt "Hin th" bng on m mi ny:
Visual C# Code:
La chn code | n/Hin code
private void Button2_Click(object sender, System.EventArgs e)
{
Label8.Text = nodeSelect.ChildNodes(0).InnerText;
Label9.Text = nodeSelect.ChildNodes(1).InnerText;
Label10.Text = nodeSelect.ChildNodes(2).InnerText;
Label11.Text = nodeSelect.ChildNodes(3).InnerText;
}

Qu tht, khng c chi kh hiu vi phng thc ny, ch nh l SelectSingleNode()
ch cho ta chn 1 nt m thi! Do , nu c nhp "Nancy" v trong ti liu c nhiu
nhn vin th cng ch nhn c 1 nhn vin tn Nancy m ti liu tm thy trc
tin thi!
K 6
THM, XA, CP NHT NT TRONG TI LIU XML

Cho n thi im ny, c l cc bn cng kh rnh cch chn 1 nt trn ti liu,
nhng chn c ri, th tt nhin l s c nhng lc bn mun thm, xa hoc
chnh sa 1 nt no . Trong k ny, mnh s hng dn cc bn x l nhng vn
ny.
Chng ta s lm th 1 ng dng nh hnh di:


ng dng ca chng ta gm:
-6 label, trong label6 l label dng hin th v tr ca nt hin hnh (lblRecord).
-1 combobox hin m s nhn vin
-4 textbox dng hin th thng tin nhn vin
-3 button tng ng vi 3 tnh nng: thm,cp nht, xa.
-4 button di chuyn trn ti liu: v u, li 1 nt, tng 1 nt, v cui.

u tin, bn nh Imports System.Xml ri sau khai bo 2 bin thnh vin:
PHP Code:
int chimuc = 0;
XmlDocument doc = new XmlDocument();

Th l tnh hung Load ca ca Form:
Visual C# Code:
La chn code | n/Hin code
private void Form1_Load(object sender, System.EventArgs e)
{
doc.Load(Application.StartupPath + "\\employees.xml");
foreach (XmlNode node in doc.DocumentElement.ChildNodes) {
cboEmployeeID.Items.Add(node.Attributes("employeeid").Value);
}
cboEmployeeID.SelectedIndex = 0;
FillControls();
UpdateLabel();
}


Trong Form1_Load, bn thy n gin l chng ta cho m tp tin employees.xml,
sau tm n nt ngun ca ti liu (employees), tm v thm cc attribute
employeeid ca nt employee vo combobox. Ri cho chn phn t u tin ca
combobox.
K n l 2 phng thc FillControls (in y thng tin nhn vin vo cc textbox
thng tin) v UpdateLabel (cp nht v tr nt trn lblRecord). 2 phng thc ny, t
na chng ta s xy dng.

By gi, chng ta tip tc th l tnh hung Click cho 4 button di chuyn trn ti
liu:
Visual C# Code:
La chn code | n/Hin code
private void btnFirst_Click(object sender, System.EventArgs e)
{
chimuc = 0;
FillControls();
UpdateLabel();
}


private void btnPrevious_Click(object sender, System.EventArgs e)
{
chimuc = chimuc - 1;
if (chimuc < 0) {
chimuc = 0;
}
FillControls();
UpdateLabel();
}



private void btnNext_Click(object sender, System.EventArgs e)
{
chimuc = chimuc + 1;
if (chimuc >= doc.DocumentElement.ChildNodes.Count - 1) {
chimuc = doc.DocumentElement.ChildNodes.Count - 1;
}
FillControls();
UpdateLabel();
}


private void btnLast_Click(object sender, System.EventArgs e)
{
chimuc = doc.DocumentElement.ChildNodes.Count - 1;
FillControls();
UpdateLabel();
}

4 phng thc ny cng khng c chi qu kh hiu, n gin l ly ch mc ca nt
hin hnh gn vo bin chimuc. Cui cng, 2 phng thc FillControl v UpdateLabel
s da vo gi tr ca bin chimuc ny m tm n nt tng ng trong ti liu.

Gi y, chng ta bt u xy dng 2 phng thc FillControl v UpdateLabel
hon tt na chng ng u tin:
Visual C# Code:
La chn code | n/Hin code
//Fill Controls
public void FillControls()
{
//node = nt con th? <chimuc> c?a nt g?c c?a ti li?u
XmlNode node = doc.DocumentElement.ChildNodes(chimuc);
//combobox m s? nhn vin = gi tr? c?a attribute employeeid c?a
nt con v?a tm
cboEmployeeID.Text = node.Attributes("employeeid").Value;
//gn chu?i n?m gi?a c?p tag ?ng-m? cho cc textbox thng tin
txtFirstName.Text = node.ChildNodes(0).InnerText;
txtLastName.Text = node.ChildNodes(1).InnerText;
txtHomePhone.Text = node.ChildNodes(2).InnerText;
txtNotes.Text = node.ChildNodes(3).InnerText;
}


//Update Label
public void UpdateLabel()
{
//doc.Document.ChildNodes.Count = s? nt con c?a nt g?c c?a ti
li?u
lblRecord.Text = (chimuc + 1).ToString + "/" +
doc.DocumentElement.ChildNodes.Count;
}


Na chng ng tip theo chng ta bt u lo cho vic thm,xa, sa thng tin cho
nt:

D nht l cp nht (UPDATE) thng tin cho mt nt:

-on m th l tnh hung Click ca button UPDATE
Visual C# Code:
La chn code | n/Hin code
private void btnUpdate_Click(object sender, System.EventArgs e)
{
//ch?n 1 nt t??ng ?ng v?i m nhn vin ???c ch?n t? cboEmployeeID
XmlNode node =
doc.SelectSingleNode("employees/employee[@employeeid = '" +
cboEmployeeID.SelectedItem + "']");
//n?u c nhn vin t??ng ?ng
if (node != null) {
//gn cc gi tr? trong cc textbox thng tin
//vo gi?a c?p tag ?ng-m? c?a cc nt con c?a nt ?ang xt
//? ?y l cc tag: firstname,lastname,notes c?a nt employee
node.ChildNodes(0).InnerText = txtFirstName.Text;
node.ChildNodes(1).InnerText = txtLastName.Text;
node.ChildNodes(2).InnerText = txtNotes.Text;
//ring v?i CData, ta ph?i lm b?ng cch t?o 1 bi?n ki?u
XmlCDataSection
//ph??ng th?c doc.CreateCDataSection s? gip ta t?o 1 CData
d?a trn 1 chu?i ???c truy?n vo ph??ng th?c
XmlCDataSection notes = doc.CreateCDataSection(txtNotes.Text);
//thay th? CDataSection c? l :
node.ChildNodes(3).ChildNodes(0)
//b?i nt notes
node.ChildNodes(3).ReplaceChild(notes,
node.ChildNodes(3).ChildNodes(0));
//l?u l?i ti li?u
doc.Save(Application.StartupPath + "\\employees.xml");
}
}

-K n l cng vic xa nt
on m th l tnh hung Click ca button DELETE:
Visual C# Code:
La chn code | n/Hin code
private void btnDelete_Click(object sender, System.EventArgs e)
{
//ch?n 1 nt t??ng ?ng v?i m nhn vin ???c ch?n t? cboEmployeeID
XmlNode node =
doc.SelectSingleNode("employees/employee[@employeeid = '" +
cboEmployeeID.SelectedItem + "']");
//n?u c nhn vin t??ng ?ng
if (node != null) {
//di chuy?n nt employee t??ng ?ng kh?i ti li?u
//thng qua ph??ng th?c RemoveChild(<nut can xoa>)
//c?a doc.DocumentElement
doc.DocumentElement.RemoveChild(node);
}
//l?u l?i ti li?u
doc.Save(Application.StartupPath + "\\employees.xml");
//C?p nh?t l?i s? v? tr c?a nt
UpdateLabel();
}

-Cng vic cui cng ca chng ta l thm 1 nt mi vo ti liu, on m c th hi
di, nhng cng khng qu kh hiu:
on m th l tnh hung Click ca Button ADD
Visual C# Code:
La chn code | n/Hin code
private void btnAdd_Click(object sender, System.EventArgs e)
{
//khai bo cc bi?n ph?n t? (XmlElement) c?a ti li?u
//?ng v?i tn c?a chng ???c truy?n vo ph??ng th?c CreateElement
XmlElement employee = doc.CreateElement("employee");
XmlElement firstname = doc.CreateElement("firstname");
XmlElement lastname = doc.CreateElement("lastname");
XmlElement homephone = doc.CreateElement("homephone");
XmlElement notes = doc.CreateElement("notes");
//khai bo 1 bi?n t??ng tr?ng cho attribute employeeid
(XmlAttribute)
//v?i tn l chu?i ???c truy?n vo ph??ng th?c CreateAttribute
XmlAttribute employeeid = doc.CreateAttribute("employeeid");
//gn gi tr? c?a cboEmployeeID vo
//bi?n attribute employeeid v?a t?o
employeeid.Value = cboEmployeeID.Text;
//khai bo cc bi?n t??ng tr?ng cho chu?i n?m gi?a c?p tag ?ng-m?
c?a 1 nt b?t k?
//v?i gi tr? l chu?i ???c truy?n vo ph??ng th?c CreateTextNode
XmlText firstnametext = doc.CreateTextNode(txtFirstName.Text);
XmlText lastnametext = doc.CreateTextNode(txtLastName.Text);
XmlText homephonetext = doc.CreateTextNode(txtHomePhone.Text);
//ring ??i v?i ?o?n v?n b?n n?m trong tag CData, ta ph?i lm cch
khc v?i cch XmlText
//t?o 1 bi?n ki?u XmlCDataSection
XmlCDataSection notestext = doc.CreateCDataSection(txtNotes.Text);
//ph?n t? notes thm notestext vo b?n thn n.
notes.AppendChild(notestext);
//ph?n t? employee thm attribute employeeid vo b?n thn n
employee.Attributes.Append(employeeid);
//cho ph?n t? employee c cc nt con l :
firstname,lastname,homephone v notes
employee.AppendChild(firstname);
employee.AppendChild(lastname);
employee.AppendChild(homephone);
employee.AppendChild(notes);
//thm ph?n t? employee v?a t?o vo nt g?c employees c?a ti li?u
doc.DocumentElement.AppendChild(employee);
//l?u l?i ti li?u
doc.Save(Application.StartupPath + "\\employees.xml");
//c?p nh?t l?i thng tin v? tr c?a nt
UpdateLabel();
}
K 7
LIN H VI KHONG TRNG

T u n gi, bn c hc v cch c v vit ti liu XML s dng lp
XmlDocument. Trong qu trnh c vit , chng ta kh trnh khi s bc mnh vi
khong trng (l k t khong trng,tab,) v mc nh khi ti liu XML c c
(dng phng thc Load hoc LoadXml) hoc lu li (phng thc Save), n s loi
b khong trng (ignore white space). K ny, mnh s ch cho cc bn cch i x
i vi l khong trng ny.

d thy s khc bit gia vic loi b hay khng loi b khong trng, chng ta
th lm 1 v d n gin nh sau:



y l on m th l tnh hung Click ca button:
Visual C# Code:
La chn code | n/Hin code
private void Button1_Click(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = CheckBox1.Checked;
doc.Load(Application.StartupPath + "\\employees.xml");
MessageBox.Show(doc.InnerXml);
}

Di y l hnh kt qu trong 2 trng hp:
-Khi checkbox khng c chn:



-Khi checkbox c chn:




Okay, by gi bn th thay th dng code:
Visual C# Code:
La chn code | n/Hin code
MessageBox.Show(doc.InnerXml);

bi dng:
Visual C# Code:
La chn code | n/Hin code
MessageBox.Show("Nt employees c: " +
doc.DocumentElement.ChildNodes.Count.ToString() + " nt con");
Cho cc bc! E cng ang tm lm mt project nh vi xml nhng ang mc phn
xa mt node. E c file xml ni dung th ny:
XML Code:
La chn code | n/Hin code
<?xml version="1.0" encoding="utf-16"?>
<wfs:FeatureCollection xmlns="http://www.opengis.net/wfs"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:new="http://localhost:8080/geoserver"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://localhost:8080/geoserver
[url]http://localhost:8080/geoserver/wfs?service=WFS;version=1.0.0;requ
est=DescribeFeatureType;typeName=new:Bao_tang[/url]
[url]http://www.opengis.net/wfs[/url]
http://localhost:8080/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd">
<gml:boundedBy>
<gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml"
decimal="." cs="," ts="">105.79407768,20.99910479
105.86126965,21.04643932</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember>
<new:Bao_tang>
<new:the_geom>
<gml:Point
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml"
decimal="." cs="" ds="">105.85141496,21.02330989</gml:coordinates>
</gml:Point>
</new:the_geom>
<new:TEN_XE>02</new:TEN_XE>
<new:TEN_LAI_XE>Sinh</new:TEN_LAI_XE>
<new:SDT>0906181284</new:SDT>
<new:DIA_CHI>YB</new:DIA_CHI>
</new:Bao_tang>
</gml:featureMember>
<gml:featureMember>
<new:Bao_tang>
<new:the_geom>
<gml:Point
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml"
decimal="." cs="" ds="">105.85141496,21.02330989</gml:coordinates>
</gml:Point>
</new:the_geom>
<new:TEN_XE>04</new:TEN_XE>
<new:TEN_LAI_XE> Tun Anh</new:TEN_LAI_XE>
<new:SDT>0902166740</new:SDT>
<new:DIA_CHI>Thanh Xun</new:DIA_CHI>
</new:Bao_tang>
</gml:featureMember>
</wfs:FeatureCollection>


E thc hin vic xa node nh sau:
Visual C# Code:
La chn code | n/Hin code
XmlDocument doc = new XmlDocument();
FileStream fstream3 = new
FileStream(xmlPath,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare
.ReadWrite);
try
{
doc.Load(fstream3);
}
catch (Exception err)
{
MessageBox.Show(err.Message);
return;
}
XmlNodeList ftMember =
doc.GetElementsByTagName("gml:featureMember");
//MessageBox.Show(ftMember.Count.ToString());
XmlNode rootNode = doc.DocumentElement;
//MessageBox.Show(rootNode.InnerXml);
for (int i = 0; i < ftMember.Count; i++) {
if (ftMember[i].ChildNodes[0].ChildNodes[3].InnerText
== cbPhoneNo.SelectedItem.ToString()) {
rootNode.RemoveChild(rootNode.ChildNodes[i+1]);



//MessageBox.Show(rootNode.ChildNodes[i+1].OuterXml);
}
}
fstream3.Seek(0, SeekOrigin.Begin); fstream3.Flush();
doc.Save(fstream3);
fstream3.Close();

Nhng kt qu khng nh mong mun. Chng hn e mun xa node u th kt qu
file xml l:
XML Code:
La chn code | n/Hin code
<gml:featureMember>
<new:Bao_tang>
<new:the_geom>
<gml:Point
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml"
decimal="." cs="" ds="">105.85141496,21.02330989</gml:coordinates>
</gml:Point>
</new:the_geom>
<new:TEN_XE>04</new:TEN_XE>
<new:TEN_LAI_XE> Tun Anh</new:TEN_LAI_XE>
<new:SDT>0902166740</new:SDT>
<new:DIA_CHI>Thanh Xun</new:DIA_CHI>
</new:Bao_tang>
</gml:featureMember>
</wfs:FeatureCollection> <new:Bao_tang>
<new:the_geom>
<gml:Point
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml"
decimal="." cs="" ds="">105.85141496,21.02330989</gml:coordinates>
</gml:Point>
</new:the_geom>
<new:TEN_XE>02</new:TEN_XE>
<new:TEN_LAI_XE>Sinh</new:TEN_LAI_XE>
<new:SDT>0906181284</new:SDT>
<new:DIA_CHI>YB</new:DIA_CHI>
</new:Bao_tang>
</gml:featureMembere>


E xem dung lng file vn d nguyn. E loay hoay mi cha bit l do v sao m n
li c thm ci phn ui vo sau root node nh th. Bc no ch gim e vi.
K 4
CHN NHIU NT BT K BNG CCH S DNG PHNG THC
SelectNodes()

Lp XmlDocument c phng thc SelectNodes() m chp nhn 1 chui cha cu
truy vn tm lc ra nhng nt m bn mun, n s tr v i tng XmlNodeList
cha danh sch tt c cc nt tha mn iu kin truy tm.
hiu r phng thc ny, chng ta cng lm th 1 ng dng nh:

nh km 5204

ng dng ca chng ta bao gm:
-1 textbox in tn ca 1 ngi no
-2 radio button: 1 chn tm kim theo tn, 1 chn tm kim theo h.
-2 button
-10 textbox
-1 combobox hin th m nhn vin (employeeid) tng ng vi ng nhn vin
m bn tm.

Trc khi th l cc tnh hng, bn lm:
-Imports System.Xml
-Khai bo 1 bin thnh vin:
Dim nodelist As XmlNodeList
-Th l tnh hung Click ca nt Tm:
Visual C# Code:
La chn code | n/Hin code
private void Button1_Click(object sender, System.EventArgs e)
{
//m tp tin employees.xml
XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + "\\employees.xml");
//nu chn radio button "Tn"
if (RadioButton1.Checked == true) {
//chn phn t employee no
//m c ng con firstname no = <textbox1.Text>
//tr v cc nt employee hp l vo bin nodelist
nodelist =
doc.SelectNodes("/employees/employee[./firstname/text() = '" +
TextBox1.Text + "']");
}
//nu chn radio button "H"
if (RadioButton2.Checked) {
//chn phn t employee no
//m c ng con lastname no = <textbox1.Text>
//tr v cc nt employee hp l vo bin nodelist
nodelist =
doc.SelectNodes("/employees/employee[./lastname/text() = '" +
TextBox1.Text + "']");
}
//i xuyn qua cc nt employee
//ca tp hp cc nt employee va tm c trn
foreach (XmlNode node in nodelist) {
ComboBox1.Items.Add(node.Attributes("employeeid").Value);
}
ComboBox1.SelectedIndex = 0;
}


on code tn khng c g ng phi bn nhiu, duy cu truy vn l ng bn, bn
c hnh dung bn tm 1 nt thng qua 1 ng dn khi pht t nt ngun ca ti
liu (employees).
/employees/employee[./firstname/text() = '" + TextBox1.Text + "']"
Nhu vy, ta dch cu truy vn ny nh sau: hy cho ti cc nt employee m c
firstname = 1 tn ch nh trong textbox1.
Hm text() l hm tr v on text ca 1 nt ( y l nt firstname).
Bn lu l n s tr v cc nt employee, ch khng phi cc nt firstname hay
lastname g u nh.

Lc ny, nu tm c cc nt tha iu kin, user s chn m s nhn vin trong
combobox, v nhn nt Hin th cho bit cc thng tin ca nhn vin ng vi
m s nhn vin . Vy, ta c on code th l tnh hung Click ca nt Hin th
nh sau:
Visual C# Code:
La chn code | n/Hin code
private void Button2_Click(object sender, System.EventArgs e)
{
//label FirstName = gi tr nm gia cp tag
<firstname>...</firstname>
Label8.Text =
nodelist(ComboBox1.SelectedIndex).ChildNodes(0).InnerText;
//label LastName = gi tr nm gia cp tag
<lastname>...</lastname>
Label9.Text =
nodelist(ComboBox1.SelectedIndex).ChildNodes(1).InnerText;
//label HomePhone = gi tr nm gia cp tag
<homephone>...</homephone>
Label10.Text =
nodelist(ComboBox1.SelectedIndex).ChildNodes(2).InnerText;
//label notes = gi tr nm gia cp tag <notes>...</notes>
Label11.Text =
nodelist(ComboBox1.SelectedIndex).ChildNodes(3).InnerText;
}

Tc gi: neverland
Cho bn cho mnh hi:
Mnh lm th bi ny trn Visual studio 2008, code ging nh ca bn nhng li
xy ra li:
V d ln 1 tm nhn vin c firstname l Andrew kq combobox l 2 (Index l 0), n
button "Hin th" hin ng thng tin ca nhn vin ny, tip tc ln 2 tm nv c tn
l Nancy kt qu combobox l 1 (Index l 1), user s chn m s nhn vin trong
combobox, v nhn nt Hin th lc ny s xut hin li, nu user ko chn m s
nhn vin trong combobox, v nhn nt Hin th th ct s hin th ng thng tin
nv c tn Nancy.
Mnh thc mc y l ci vic user chn m s nv trong combobox s lm dng
lnh sau coi nh b i:
Visual C# Code:
La chn code | n/Hin code
ComboBox1.SelectedIndex = 0;
v khi chn th ComboBox1.SelectedIndex s ko cn bng 0 nu t ln tm kim
th 2 tr i. V nh v d trn th n nt "Hin th" ct s thc hin cu lnh
Label8.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(0).In nerText; vi gi
tr ComboBox1.SelectedIndex=1 v iu ny gy ra li. Mnh th chy cu lnh
Label8.Text = nodelist[1].ChildNodes[0].InnerText; th cng bo li.
Khng bit mnh hi v ni th c ng ko? Nu c g sai mong mi ngi ch gip!
Cm n!

XML (vit tt t ting Anh eXtensible Markup Language, "Ngn ng nh du M
rng") l ngn ng nh du vi mc ch chung do W3C ngh, to ra cc ngn
ng nh du khc. y l mt tp con n gin ca SGML, c kh nng m t nhiu
loi d liu khc nhau. Mc ch chnh ca XML l n gin ha vic chia s d liu
gia cc h thng khc nhau, c bit l cc h thng c kt ni vi Internet. Cc ngn
ng da trn XML (th d: RDF, RSS, MathML, XHTML, SVG, GML v cXML) c
nh ngha theo cch thng thng, cho php cc chng trnh sa i v kim tra hp l
bng cc ngn ng ny m khng cn c hiu bit trc v hnh thc ca chng.
Mc lc
[n]
1 Lch s
2 c im
3 S lc v c php
4 Lin kt ngoi
o 4.1 Ti liu Ting Vit
o 4.2 Ting Anh
4.2.1 c t
4.2.2 Ti liu c bn
o 4.3 Trnh son tho XML
o 4.4 XML certification
o 4.5 Trnh phn tch c php XML
o 4.6 Danh sch th XML
[sa] Lch s
Vo gia nhng nm 1990, cc chuyn gia SGML c kinh nghim vi World Wide
Web (vn cn kh mi vo thi ). H tin tng rng SGML c th cung cp gii php
cho cc vn m Web ang gp phi. Jon Bosak a ra kin W3C nn ti tr mt
chng trnh mang tn "SGML trn Web".
[sa] c im
XML cung cp mt phng tin dng vn bn (text) m t thng tin v p dng mt
cu trc kiu cy cho thng tin . Ti mc cn bn, mi thng tin u th hin di
dng text, chen gia l cc th nh du (markup) vi nhim v k hiu s phn chia
thng tin thnh mt cu trc c th bc ca cc d liu k t, cc phn t dng cha
d liu, v cc thuc tnh ca cc phn t . V mt , XML tng t vi cc biu
thc S (S-expression) ca ngn ng lp trnh LISP ch chng u m t cc cu trc
cy m trong mi nt c th c mt danh sch tnh cht ca ring mnh.
n v c s ca XML l cc k t theo nh ngha ca Universal Character Set (B k t
ton cu). Cc k t c kt hp theo cc t hp chui hp l to thnh mt ti liu
XML. Ti liu ny gm mt hoc nhiu thc th, mi thc th thng l mt phn no
ca cc k t thuc ti liu, c m ha di dng mt chui cc bit v lu tr trong
mt tp vn bn (text file).
Cc tp XML c th dng cho nhiu loi d liu a phng tin. RFC3023 nh ngha
cc loi "application/xml" v "text/xml", vi rng d liu c biu din bng XML m
khng ni g n ng ngha ca d liu.
S ph bin ca cc phn mm son tho vn bn (word processor) h tr vic son
tho v bo tr ti liu XML mt cch nhanh chng. Trc XML, c rt t ngn ng m
t d liu vi cc c im a nng, thn thin vi giao thc Internet, d hc v d to.
Thc t, a s cc nh dng trao i d liu thi u chuyn dng, c tnh c quyn,
v c nh dng nh phn (chui bit thay v chui k t) kh dng chung gia cc ng
dng phn mm khc nhau hay gia cc h nn (platform) khc nhau. Vic to v bo tr
trn cc trnh son tho thng dng li cng kh khn.
Bng cch cho php cc tn d liu, cu trc th bc c php, v ngha ca cc phn
t v thuc tnh c tnh cht m v c th c nh ngha bi mt gin ty bin c,
XML cung cp mt c s c php cho vic to lp cc ngn ng nh du da XML theo
yu cu. C php chung ca cc ngn ng l c nh cc ti liu phi tun theo cc
quy tc chung ca XML, bo m rng tt c cc phn mm hiu XML t ra cng phi c
kh nng c (phn tch c php - parse) v hiu b cc tng i ca thng tin trong
cc ti liu . Gin ch b sung mt tp cc rng buc cho cc quy tc c php. Cc
gin thng hn ch tn ca phn t v thuc tnh v cc cu trc th bc c php,
v d, ch cho php mt phn t tn 'ngy sinh' cha mt phn t tn 'ngy' v mt phn
t c tn 'thng', mi phn t phi cha ng mt k t. y l im khc bit gia XML
v HTML. HTML c mt b cc phn t v thuc tnh khng mm do, ch c mt tc
dng v ni chung l khng th dng cho mc ch khc.
XML khng hn ch v vic n c s dng nh th no. Mc d XML v c bn l
dng text, cc phn mm vi chc nng tru tng ha n thnh cc nh dng khc giu
thng tin hn nhanh chng xut hin, qu trnh tru tng ha ny c thc hin ch
yu qua vic s dng cc gin nh hng kiu d liu (datatype-oriented schema) v
khun mu lp trnh hng i tng (m trong , mi ti liu XML c thao tc nh
l mt i tng). Nhng phn mm nh vy c th coi XML nh l dng text c
tun t ha ch khi n cn truyn d liu qua mng.
[sa] S lc v c php
C php XML c bn cho mt phn t l
<tn thuc_tnh="gi tr">ni dung</tn>
1. <?xml version="1.0" encoding="UTF-8"?>
2.
3. <cng_thc_nu_n tn="bnh m" thi_gian_chun_b="5 pht"
thi_gian_nu="3 ting">
4.
5. <title>Bnh m c bn</title>
6.
7. <nguyn_liu lng="3" n_v="ca">Bt m</nguyn_liu>
8.
9. <nguyn_liu lng="7" n_v="gram">Men</nguyn_liu>
10.
11. <nguyn_liu lng="1.5" n_v="ca"
trng_thi="m">Nc</nguyn_liu>
12.
13. <nguyn_liu lng="1" n_v="tha c ph">Mui</nguyn_liu>
14.
15. <ch_dn>
16.
17. <bc>Trn tt c cc nguyn liu vi nhau v nho k</bc>
18.
19. <bc>Ph mt mnh vi, mt ting ng h trong phng
m.</bc>
20.
21. <bc>Nho li, vo khun, cho vo l nng.</bc>
22.
23. </ch_dn>
24.
25. </cng_thc_nu_n>
26.
Dng u tin l Khai bo XML (XML declaration): l mt dng khng bt buc, vi
nhim v thng bo phin bn XML ang c s dng (thng l phin bn 1.0), v
cn c th cha thng tin v m ha k t v cc ph thuc bn ngoi.
Phn cn li ca ti liu ny cha cc phn t lng nhau, mt s phn t trong c cc
thuc tnh v ni dung. Mt phn t thng bao gm hai th (tag), mt th bt u v
mt th kt thc, c th bao quanh vn bn v cc phn t khc. Th bt u bao gm
mt ci tn t trong mt cp ngoc nhn, nh "<bc>"; th kt thc bao gm chnh ci
tn t trong mt cp ngoc nhn, vi mt du gch cho ng trc, nh "</bc>".
Ni dung ca phn t l tt c nhng g nm gia th bt u v th kt thc, bao gm
vn bn v cc phn t (con) khc. Di y l mt phn t XML hon chnh, vi th bt
u, ni dung vn bn, v th kt thc:
11. <bc>Nho li, vo khun, cho vo l nng.</bc>
12.
Bn cnh ni dung, mt phn t c th cha cc thuc tnh cc cp tn - gi tr c
t trong th bt u, ngay sau tn phn t. Gi tr ca thuc tnh phi c t trong cp
nhy n hoc nhy kp, mi tn thuc tnh ch c xut hin mt ln trong mi phn
t.
4. <nguyn_liu lng="3" n_v="ca">Bt m</nguyn_liu>
5.
Trong v d ny, phn t nguyn_liu c hai thuc tnh: lng vi gi tr "3", v n v
vi gi tr "ca". Trong c hai trng hp, cng nh tn v ni dung ca cc phn t, ti
cp nh du, tn v gi tr ca cc thuc tnh cng ch l d liu text cc gi tr "3"
v "ca" khng phi mt s lng v mt n v o lng m ch l cc chui k t m tc
gi ti liu c th dng biu din nhng th .
Ngoi vn bn, cc phn t cn c th cha cc phn t khc:
8. <ch_dn>
9.
10. <bc>Trn tt c cc nguyn liu vi nhau v nho
k</bc>
11.
12. <bc>Ph mt mnh vi, mt ting ng h trong phng
m.</bc>
13.
14. <bc>Nho li, vo khun, cho vo l nng.</bc>
15.
16. </ch_dn>
17.
Trong , phn t ch_dn cha ba phn t bc. XML i hi rng cc phn t phi
c lng nhau mt cch ng n cc phn t khng c c phn xen vo nhau. V
d, on di y khng phi XML nh dng ng (well-formed XML) v cc phn t
em v strong xen vo nhau:
1. <!-- SAI! NH DNG KHNG NG! -->
2.
3. <p>Normal <em>emphasized <strong>strong emphasized</em>
strong</strong></p>
4.
Mi ti liu XML phi c ng mt phn t gc ti bc trn cng (cn gi l phn t
vn bn), do on sau cng s l mt ti liu XML nh dng sai:
1. <?xml version="1.0" encoding="UTF-8"?>
2.
3. <!-- SAI! NH DNG KHNG NG! -->
4.
5. < vt> vt th nht</ vt>
6.
7. < vt> vt th hai</ vt>
8.
XML cung cp c php c bit biu din mt phn t vi ni dung rng. Thay v vit
mt th bt u v mt th kt thc ngay sau , ti liu c th cha th phn t rng
m trong du gch cho ng ngay sau tn phn t. Hai v d sau l tng ng v
chc nng:
<foo></foo>
</div>
:<source lang="xml" enclose="div" style="font-size:1.2em;" >
<foo />
XML cung cp hai phng php biu din cc k t c bit: cc tham chiu thc th
(entity reference) v cc tham chiu k t s (numeric character reference).
Trong XML, mt thc th (entity) l mt thn d liu c t tn vi d liu thng l
text, chng hn mt k t c bit.
Mt tham chiu thc th l mt k hiu i din cho thc th . N bao gm tn ca
thc th vi du ("&") ng trc v mt du chm phy (";") ng sau. XML c nm
thc th c khai bo trc:
&amp; (&)
&lt; (<)
&gt; (>)
&apos; (')
&quot; (")
Di y l mt v d s dng mt thc th XML khai bo trc biu din du & trong
tn "AT&T":
<tn-cng-ty>AT&amp;T</tn-cng-ty>
Nu cn khai bo thm cc thc th khc, vic c thc hin ti DTD ca ti liu.
Sau y l mt v d c bn v khai bo thc th ti mt DTD nh ni b. Cc thc th
c khai bo c th m t cc k t n hay cc on vn bn, v c th tham chiu ln
nhau.
1. <?xml version="1.0" encoding="UTF-8"?>
2.
3. <!DOCTYPE example [
4.
5. <!ENTITY copy "">
6.
7. <!ENTITY copyright-notice "Copyright 2006, XYZ
Enterprises">
8.
9. ]>
10.
11. <root>
12.
13. &copyright-notice;
14.
15. </root>
16.
Khi xem ti mt trnh duyt thch hp, ti liu XML trn s hin ra nh sau:
<root> Copyright 2006, XYZ Enterprises </root>
Cc tham chiu k t s trng ging nh cc thc th. Nhng thay cho mt ci tn,
chng gm mt k t "#" v theo sau l mt con s. Con s (theo h thp phn hoc h
c s 16 vi tin t "x") i din cho mt m hiu Unicode (Unicode code point), v
thng c dng i din cho cc k t khng d g trn my tnh, chng hn mt
ch ci -rp trong mt ti liu c son trn mt my tnh chu u. Du & trong v d
"AT&T" c th c biu din nh sau (s 38 thp phn v 26 trong h c s 16 u i
din cho gi tr Unicode ca du &):
1. <tn-cng-ty>AT&#38;T</tn-cng-ty>
2.
3. <tn-cng-ty>AT&#x26;T</tn-cng-ty>
4.
Cn c nhiu quy tc khc cn thit cho vic vit cc ti liu XML nh dng ng,
chng hn mt tn XML c th cha cc k t no, nhng phn gii thiu ngn ny ch
cung cp cc kin thc cn bn c v hiu c nhiu ti liu XML.

You might also like