วิธีอ่าน XML ใน C#

Withi Xan Xml Ni C



รูปแบบข้อมูลที่ใช้กันอย่างแพร่หลายสำหรับการแบ่งปันข้อมูลทางอินเทอร์เน็ตคือ XML เนื่องจากข้อมูลสามารถจัดเก็บในนั้นและแลกเปลี่ยนระหว่างระบบในลักษณะที่ยืดหยุ่นและเป็นมิตรกับผู้ใช้ ใน C# การอ่านไฟล์ XML เป็นงานทั่วไป และ .NET framework มีคลาสและวิธีการต่างๆ สำหรับการแยกวิเคราะห์และการอ่านไฟล์ XML โพสต์นี้จะกล่าวถึงการใช้กรอบงาน. NET เพื่ออ่าน XML ใน C #

การอ่าน XML ใน C#

มีหลายวิธีในการอ่านไฟล์ XML ใน C# และแต่ละวิธีมีข้อดีและข้อเสีย และทางเลือกจะขึ้นอยู่กับข้อกำหนดของโครงการ ต่อไปนี้เป็นวิธีอ่านไฟล์ XML ใน C#:

นี่คือเนื้อหาของไฟล์ XML ที่ฉันสร้างขึ้นและจะใช้สำหรับการสาธิตในวิธีการที่กำลังจะมาถึง:







< ?xml รุ่น = '1.0' การเข้ารหัส = 'utf-8' ? >
< พนักงาน >
< พนักงาน >
< รหัส > 1 รหัส >
< ชื่อ > แซม บอช ชื่อ >
< แผนก > การตลาด แผนก >
< เงินเดือน > 50000 เงินเดือน >
พนักงาน >
< พนักงาน >
< รหัส > 2 รหัส >
< ชื่อ > เจน โด ชื่อ >
< แผนก > การเงิน แผนก >
< เงินเดือน > 60000 เงินเดือน >
พนักงาน >
< พนักงาน >
< รหัส > 3 รหัส >
< ชื่อ > เจมส์ ชื่อ >
< แผนก > ทรัพยากรมนุษย์ แผนก >
< เงินเดือน > 70000 เงินเดือน >
พนักงาน >
พนักงาน >

1: การใช้ XmlDocument

หากต้องการอ่านไฟล์ XML ใน C# คุณสามารถใช้คลาส XmlDocument หรือคลาส XDocument ซึ่งทั้งสองอย่างนี้เป็นส่วนหนึ่งของเนมสเปซ System.Xml คลาส XmlDocument ให้แนวทาง DOM (Document Object Model) สำหรับการอ่าน XML ในขณะที่คลาส XDocument จัดเตรียมแนวทาง LINQ (Language-Integrated Query) นี่คือตัวอย่างการใช้คลาส XmlDocument เพื่ออ่านไฟล์ XML:



ใช้ระบบ;
ใช้ System.Xml;

โปรแกรมคลาส
{
โมฆะคงที่หลัก ( สตริง [ ] หาเรื่อง )
{
XmlDocument doc = XmlDocument ใหม่ ( ) ;
doc.Load ( 'พนักงาน.xml' ) ;

โหนด XmlNodeList = doc.DocumentElement.SelectNodes ( '/พนักงาน/พนักงาน' ) ;

แต่ละ ( โหนด XmlNode ใน โหนด )
{
สตริง รหัส = โหนด เลือกโหนดเดียว ( 'รหัส' ) . ข้อความภายใน;
ชื่อสตริง = โหนด เลือกโหนดเดียว ( 'ชื่อ' ) . ข้อความภายใน;
แผนกสตริง = node.SelectSingleNode ( 'แผนก' ) . ข้อความภายใน;
เงินเดือนสตริง = node.SelectSingleNode ( 'เงินเดือน' ) . ข้อความภายใน;
Console.WriteLine ( 'ID: {0}, ชื่อ: {1}, แผนก: {2}, เงินเดือน: {3}' , รหัส , ชื่อ, แผนก, เงินเดือน ) ;
}
}
}

รหัสนี้ใช้คลาส XmlDocument เพื่อโหลดไฟล์ XML และเมธอด SelectNodes เพื่อดึงรายชื่อโหนดพนักงาน จากนั้น สำหรับโหนดพนักงานแต่ละโหนด จะใช้วิธี SelectSingleNode เพื่อดึงค่าของโหนด id ชื่อ แผนก และเงินเดือนย่อย และแสดงโดยใช้ Console.WriteLine:







2: การใช้ XDocument

นอกจากนี้ คุณยังสามารถใช้คลาส XDocument เพื่ออ่านไฟล์ XML โดยใช้วิธี LINQ และด้านล่างนี้คือโค้ดที่แสดงวิธีการดำเนินการ:

ใช้ระบบ;

โปรแกรมคลาส
{
โมฆะคงที่หลัก ( สตริง [ ] หาเรื่อง )
{
XDocument doc = XDocument.Load ( 'พนักงาน.xml' ) ;

แต่ละ ( องค์ประกอบ XElement ใน doc.ลูกหลาน ( 'พนักงาน' ) )
{
นานาชาติ รหัส = int.แยกวิเคราะห์ ( element.Element ( 'รหัส' ) .ค่า ) ;
ชื่อสตริง = element.Element ( 'ชื่อ' ) .ค่า;
แผนกสตริง = element.Element ( 'แผนก' ) .ค่า;
int เงินเดือน = int.Parse ( element.Element ( 'เงินเดือน' ) .ค่า ) ;
Console.WriteLine ( $ 'ID: {id}, ชื่อ: {name}, แผนก: {department}, เงินเดือน: {salary}' ) ;
}
}
}

ไฟล์ XML ถูกโหลดลงในวัตถุ XDocument โดยใช้เมธอด XDocument.Load จากนั้นองค์ประกอบ 'พนักงาน' ของไฟล์ XML จะถูกดึงข้อมูลทั้งหมดโดยใช้เทคนิคผู้สืบทอด สำหรับแต่ละองค์ประกอบ องค์ประกอบย่อยสามารถเข้าถึงได้โดยใช้เมธอดองค์ประกอบ และค่าขององค์ประกอบจะถูกแยกออกโดยใช้คุณสมบัติ Value สุดท้าย ข้อมูลที่แยกออกมาจะถูกพิมพ์ไปยังคอนโซล



โปรดทราบว่า XDocument เป็นของเนมสเปซ System.Xml.Linq ดังนั้นคุณต้องรวมคำสั่งต่อไปนี้โดยใช้คำสั่งที่ด้านบนของไฟล์ C# ของคุณ

3: การใช้ XmlReader

XmlReader เป็นวิธีที่รวดเร็วและมีประสิทธิภาพในการอ่านไฟล์ XML ใน C# โดยจะอ่านไฟล์ตามลำดับ ซึ่งหมายความว่าจะโหลดครั้งละ 1 โหนดเท่านั้น จึงเหมาะอย่างยิ่งสำหรับการทำงานกับไฟล์ XML ขนาดใหญ่ที่อาจจัดการในหน่วยความจำได้ยาก

ใช้ระบบ;
ใช้ System.Xml;

โปรแกรมคลาส
{
โมฆะคงที่หลัก ( สตริง [ ] หาเรื่อง )
{
โดยใช้ ( โปรแกรมอ่าน XmlReader = XmlReader.Create ( 'พนักงาน.xml' ) )
{
ในขณะที่ ( ผู้อ่านอ่าน ( ) )
{
ถ้า ( reader.NodeType == XmlNodeType.Element && ชื่อผู้อ่าน == 'พนักงาน' )
{
Console.WriteLine ( 'รหัส: ' + reader.GetAttribute ( 'รหัส' ) ) ;
reader.ReadToDescendant ( 'ชื่อ' ) ;
Console.WriteLine ( 'ชื่อ: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( 'แผนก' ) ;
Console.WriteLine ( 'แผนก: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextSibling ( 'เงินเดือน' ) ;
Console.WriteLine ( 'เงินเดือน: ' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

ในตัวอย่างนี้ เราใช้ XmlReader สร้างเมธอดเพื่อสร้างอินสแตนซ์ของ XmlReader และส่งพาธไฟล์ XML เป็นพารามิเตอร์ จากนั้นเราจะใช้ลูป while เพื่ออ่านผ่านโหนดไฟล์ XML ทีละโหนดโดยใช้เมธอด Read ของ XmlReader

ภายในลูป ก่อนอื่นเราจะตรวจสอบว่าโหนดปัจจุบันเป็นองค์ประกอบพนักงานหรือไม่โดยใช้คุณสมบัติ NodeType และ Name ของ XmlReader ถ้าเป็นเช่นนั้น เราจะใช้เมธอด GetAttribute เพื่อดึงค่าของแอตทริบิวต์ id

ต่อไป เราใช้เมธอด ReadToDescendant เพื่อย้ายผู้อ่านไปยังองค์ประกอบชื่อภายในองค์ประกอบพนักงาน จากนั้นค่าขององค์ประกอบชื่อจะได้รับโดยใช้ฟังก์ชัน ReadElementContentAsString

ในทำนองเดียวกัน เราใช้เมธอด ReadToNextSibling เพื่อย้ายผู้อ่านไปยังองค์ประกอบรองถัดไป และรับค่าขององค์ประกอบแผนกและเงินเดือน

สุดท้าย เราใช้การบล็อกเพื่อให้แน่ใจว่าวัตถุ XmlReader ถูกกำจัดอย่างถูกต้องหลังจากที่เราอ่านไฟล์ XML เสร็จแล้ว:

4: XML เป็น LINQ

การอ่านไฟล์ XML โดยใช้ LINQ เป็น XML ใน C# เป็นวิธีที่มีประสิทธิภาพในการเข้าถึงและจัดการข้อมูล XML LINQ to XML เป็นส่วนประกอบของเทคโนโลยี LINQ ที่ให้ API ที่ง่ายและมีประสิทธิภาพสำหรับการทำงานกับข้อมูล XML

ใช้ระบบ;
ใช้ System.Linq;
ใช้ System.Xml.Linq;

โปรแกรมคลาส
{
โมฆะคงที่หลัก ( สตริง [ ] หาเรื่อง )
{
XDocument doc = XDocument.Load ( 'พนักงาน.xml' ) ;

พนักงาน var = จาก e ใน doc.ลูกหลาน ( 'พนักงาน' )
เลือก ใหม่
{
รหัส = e.Element ( 'รหัส' ) .ค่า,
ชื่อ = e.Element ( 'ชื่อ' ) .ค่า,
แผนก = e.Element ( 'แผนก' ) .ค่า,
เงินเดือน = e.Element ( 'เงินเดือน' ) .ค่า
} ;
แต่ละ ( พนักงาน var ใน พนักงาน )
{
Console.WriteLine ( $ 'รหัส: {employee.Id}, ชื่อ: {employee.Name}, แผนก: {employee.Department}, เงินเดือน: {employee.Salary}' ) ;
}
}
}

ในโค้ดนี้ ก่อนอื่นเราจะโหลดไฟล์ XML โดยใช้เมธอด XDocument.Load() จากนั้น เราใช้ LINQ เป็น XML เพื่อสืบค้นข้อมูล XML และเลือกองค์ประกอบ id ชื่อ แผนก และเงินเดือนสำหรับแต่ละองค์ประกอบพนักงาน เราจัดเก็บข้อมูลนี้ในรูปแบบนิรนาม จากนั้นวนซ้ำผลลัพธ์เพื่อพิมพ์ข้อมูลพนักงานไปยังคอนโซล

5: การใช้ XPath

XPath เป็นภาษาเคียวรีที่ใช้ในการนำทางผ่านเอกสาร XML เพื่อค้นหาองค์ประกอบ คุณลักษณะ และโหนดเฉพาะ เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการค้นหาและกรองข้อมูลในเอกสาร XML ใน C# เราสามารถใช้ภาษา XPath เพื่ออ่านและดึงข้อมูลจากไฟล์ XML

ใช้ระบบ;
ใช้ System.Xml.XPath;
ใช้ System.Xml;

โปรแกรมคลาส
{
โมฆะคงที่หลัก ( สตริง [ ] หาเรื่อง )
{
XmlDocument doc = XmlDocument ใหม่ ( ) ;
doc.Load ( 'พนักงาน.xml' ) ;

// สร้าง XPathNavigator จากเอกสาร
XPathNavigator nav = doc.CreateNavigator ( ) ;

// รวบรวมนิพจน์ XPath
XPathExpression หมดอายุ = nav.คอมไพล์ ( '/พนักงาน/พนักงาน/ชื่อ' ) ;

// ประเมินนิพจน์และทำซ้ำผ่านผลลัพธ์
XPathNodeIterator ตัววนซ้ำ = nav.Select ( หมดอายุ ) ;
ในขณะที่ ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

รหัสนี้โหลดไฟล์ “employees.xml” โดยใช้ XmlDocument สร้าง XPathNavigator จากเอกสาร และคอมไพล์นิพจน์ XPath เพื่อเลือกองค์ประกอบ ทั้งหมดภายใต้องค์ประกอบ จากนั้นจะประเมินนิพจน์และทำซ้ำผ่านผลลัพธ์ พิมพ์ค่าขององค์ประกอบ แต่ละรายการ

บันทึก: การใช้ XPath อาจเป็นวิธีที่มีประสิทธิภาพและยืดหยุ่นในการเลือกองค์ประกอบและแอตทริบิวต์จากเอกสาร XML แต่ก็อาจซับซ้อนกว่าวิธีอื่นๆ ที่เราได้กล่าวถึง

บทสรุป

การใช้คลาส XmlDocument ให้ความสามารถในการจัดการ DOM เต็มรูปแบบ แต่อาจช้ากว่าและใช้หน่วยความจำมากกว่าวิธีอื่นๆ คลาส XmlReader เป็นตัวเลือกที่ดีสำหรับการอ่านไฟล์ XML ขนาดใหญ่ เนื่องจากเป็นคลาสที่รวดเร็ว ส่งต่ออย่างเดียว และไม่แคช คลาส XDocument มีไวยากรณ์ที่ง่ายและกระชับกว่า แต่อาจไม่มีประสิทธิภาพเท่า XmlReader นอกจากนี้ เมธอด LINQ เป็น XML และ XPath ยังให้ความสามารถในการสืบค้นที่มีประสิทธิภาพเพื่อดึงข้อมูลเฉพาะจากไฟล์ XML