Câu chuyện bắt đầu
Hôm đó thầy yêu cầu mình dùng C# để xử lí một cái file xml tựa tựa như sau:
<?xml version="1.0" encoding="UTF-8" ?>
<people>
<person sex="Male">
<name>Rice from Vietnam</name>
<email>rice@rice.com</email>
</person>
<person sex="Female">
<name>Girl from Vietnam</name>
<email>girl@girl.com</email>
</person>
</people>
Ui dào, không có gì khó cả. . Cái này thầy dạy rồi. Dùng XDocument, Descentdants và Element nè. Tự nhủ điểm cao ngon ơ.
class Program
{
static string name { get; set; }
static string sex { get; set; }
static string email { get; set; }
static void Main(string[] args)
{
XDocument document = XDocument.Load("xxx/people.xml");
var humanity = document.Descendants("person").ToList();
foreach (var person in humanity)
{
name = person.Element("name")?.Value;
email = person.Element("email")?.Value;
Console.WriteLine($"{name} - {email}");
}
Console.ReadLine();
}
}
Ơ mà thiếu nè...
Ờ ha! Sao lấy được value của sex ta? Phải nhấn mạnh trước là thầy đã dạy mình dùng XDocument, Descentdants và Element. Mình nghĩ vậy là đủ nên cứ thế mà phang thôi.
Nhưng phang mãi vẫn không ra nên mình cáu.
Nếu là một anh Coder khác, có lẽ anh ấy sẽ bình tĩnh ngồi chấm để tìm function hay arg cần sử dụng, nhưng rất tiếc mình lại là thằng thiếu kiên nhẫn. Thế là mình quyết định chơi trò nguyên thủy là cắt ghép chuỗi.
static string GetSex(string instance)
{
string[] result = instance.Replace("<person sex=", "").Split('>');
return result[0].Replace('"','-').Replace("-",string.Empty);
}
Rồi kéo full program là:
foreach (var person in humanity)
{
sex = GetSex(person.ToString());
name = person.Element("name")?.Value;
email = person.Element("email")?.Value;
Console.WriteLine($"{name} - {sex} - {email}");
}
Thế là chạy chương trình thấy ngon ơ:
Chuyện chưa có hết ...
Chuyện là nộp bài xong, về nhà ăn nốt đĩa mì, mình rảnh rang ngồi gõ lại bài hồi chiều. Lúc gõ tới chữ person mình vô tình .At một cái, và cậu chàng hiện ra ...
Holly shit , return the XAttribute of this XElement, mình bắt đầu nghĩ đến tình huống liệu mình có bị ngáo chó không khi ngồi viết cái hàm cắt chuỗi kia ...
foreach (var person in humanity)
{
sex = person.Attribute("sex")?.Value;
name = person.Element("name")?.Value;
email = person.Element("email")?.Value;
Console.WriteLine($"{name} - {sex} - {email}");
}
Và mình ngáo chó thật ...
Kết
Trước mình có đọc rất nhiều bài như https://medium.freecodecamp.org/how-to-think-like-a-programmer-lessons-in-problem-solving-d1d8bf1de7d2 hay là https://medium.freecodecamp.org/the-main-pillars-of-learning-programming-and-why-beginners-should-master-them-e04245c17c56. Mình đã nghĩ mình thấm nhuần rồi, mình đã có suy nghĩ của lập trình viên rồi. Nhưng không, như một trò đùa thôi =)).
Qua bài này mình chỉ muốn nhấn mạnh thêm một thứ đã quá quá cũ là làm gì cũng nên kiên nhẫn một tí.
Trước bất cứ một cái problem nào thì cũng nên tuân thủ các bước
Đọc đề -> Hiểu đề ->Giải đề (Xé đề) -> Đi về.
Bước hiểu là một bước vô cùng quan trọng. Không hiểu mà cứ lao lao vào code là ngu. Ví dụ như trong vấn đề kia, nếu mình chịu khó ngồi ngẫm thì có lẽ đã biết nó là Attribute, hoặc đơn giản ngồi chấm thôi cũng có khi tìm ra Châu Mỹ rồi.
Vậy nên anh em làm gì cũng thế, bình tĩnh là trên hết.