Tôi đang cố đọc từ một tệp xml không phải lúc nào cũng có cùng một lược đồ, mục tiêu là đọc từ tệp và sắp xếp dữ liệu đã thu thập thành một mảng để tôi có thể sử dụng dữ liệu đã sắp xếp sau này. ..
Tệp XML:
đây là mã của tôi
Uri uri = Uri mới(đường dẫn);
tên tệp chuỗi = System.IO.Path.GetFileName(uri.LocalPath);
Trình đọc XmlReader = XmlReader.Create(path);
int x = 0;
int Row_length = 0;
#khu vực Kiểm tra độ dài hàng trong tệp
//==================================================== ====================================================== =
Tài liệu XmlDocument = XmlDocument mới();
doc.Load(đường dẫn);
Gốc XmlElement = doc.DocumentElement;
XmlNodeList elemList = root.GetElementsByTagName("imgdir");
for (x = 0; x < elemList.Count; x++);
DisplayChanges_Box.Text += ("Tổng số phần tử= " + x + '\n' + "Tệp XML= " + tên tệp + '\n');
Row_length = x;
#endregion
int CurrentArrayDataBox = 0;
int[] itemIDArray = new int[x + 1];
chuỗi[] itemNamesArray = chuỗi mới[x + 1];
int LastRow = Row_length;
trong khi (reader.Read())
{
if (reader.IsStartElement())
{
if (reader.HasAttribut)
{
// <>
chuỗi ItemNumberAsString;
int ItemNumber;
chuỗi ItemDescription;
ItemNumberAsString = reader.GetAttribution ("tên");
bool được phân tích cú pháp = Int32.TryParse(ItemNumberAsString, out ItemNumber);
nếu (được phân tích cú pháp)
{
reader.ReadToNextSibling("string");
ItemDescription = reader.GetAttribution ("chuỗi");
// << Ghi vào ID và Tên Mảng các giá trị dữ liệu thu được>>
itemIDArray[CurrentArrayDataBox] = ItemNumber;
itemNamesArray[CurrentArrayDataBox] = ItemDescription;
CurrentArrayDataBox++;
reader.ReadToFollowing("imgdir");
}
khác nếu (! đã phân tích cú pháp)
{
reader.ReadToFollowing("imgdir");
}
}
}
}
==================
Chương trình sẽ sắp xếp thông tin như thế này...
Mỗi lần nó kiểm tra thuộc tính hiện tại để phát hiện xem nó có phải là một chuỗi hay không. Giống như:
"Eqp.img"
"Eqp"
"Phụ kiện"
phớt lờ họ
hoặc nếu nó là
"1010000"
"1010001"
"1010002"
"1010003"
...
Lưu số vào ItemIDArray
, lưu trữ giá trị tên chuỗi của chúng trong ItemNamesArray
Hiện tại tôi dường như không thể lấy được số, chỉ phát hiện xem đó có phải là một chuỗi hay không và khi thuộc tính là số thì nó hiển thị dưới dạng "tên" thay vì số thực
Trân trọng.
Đoạn mã sau kiểm tra xem nút imgdir có nút con chuỗi hay không.
bool riêng ReadNameAndValue(XmlNode cha, tên chuỗi ngoài, giá trị chuỗi ngoài)
{
tên = "";
giá trị = "";
var node = parent.SelectSingleNode("./string");
nếu (nút == null)
{
trả về sai;
}
thử
{
name = parent.SelectSingleNode("./string/@name").InnerText;
value = parent.SelectSingleNode("./string/@value").InnerText;
}
bắt (Ngoại lệ)
{
}
trả về đúng sự thật;
}
public void ParseDoc(string fileName = @"c:\temp\soexample.xml")
{
Tài liệu XmlDocument = XmlDocument mới();
doc.Load(tên tệp);
var element = doc.SelectNodes("//imgdir");
foreach (nút XmlNode trong các phần tử)
{
tên chuỗi;
giá trị chuỗi;
if (ReadNameAndValue(nút, tên out, giá trị out))
{
chuỗi id = node.SelectSingleNode("./@name").InnerText;
Console.WriteLine("Id: " + id + ", Tên: " + name + ", Value: " + value);
// làm bất cứ điều gì bạn muốn với id, tên và giá trị
}
}
}
Những gì được in là
Id: 1010000, Tên: tên, Giá trị: Râu dài màu nâu
Id: 1010001, Tên: tên, Giá trị: Goatee
Id: 1010002, Tên: tên, Giá trị: Mặt nạ Ninja dành cho nam
Id: 1010003, Tên: tên, Giá trị: Bóng 5 giờ
Id: 1010004, Tên: tên, Giá trị: Bộ ria mép của Tướng quân (1)
Id: 1010005, Tên: tên, Giá trị: Bộ ria mép của Tướng quân (2)
Id: 1010006, Tên: tên, Giá trị: Vết sẹo Yakuza
Id: 1011000, Tên: tên, Giá trị: Mặt nạ Ninja dành cho Nữ
Id: 1011001, Tên: tên, Giá trị: Mặt nạ Ninja SF
Tôi là một lập trình viên xuất sắc, rất giỏi!