Adam'a katılıyorum, ideal koşul, xml dosyasının içeriğini tanımlayan bir şemaya sahip olmaktır. Ancak bazen bu mümkün değildir. Burada, bir xml belgesinin tüm düğümlerini yinelemek ve benzersiz yerel adları depolamak için bir sözlük kullanmak için basit bir yöntem var. Her yerel adın derinliğini izlemeyi seviyorum, bu yüzden derinliği depolamak için bir int listesi kullanıyorum. Tüm belgeyi XmlDocument'ın yaptığı gibi yüklemediğinden, XmlReader'ın "bellekte kolay" olduğunu unutmayın. Bazı durumlarda, xml verilerinin boyutu küçük olduğu için küçük bir fark yaratır. Aşağıdaki örnekte, bir XmlReader ile 18,5MB bir dosya okunur. Bu verileri yüklemek için bir XmlDocument kullanmak, içeriğini okumak ve örneklemek için bir XmlReader kullanmaktan daha az verimli olurdu. Sadece XML dosyası yükleyerek ve bir sonuç web sayfası olarak isimlerini yazdırmak - Burada bulmak
string documentPath = @"C:\Docs\cim_schema_2.18.1-Final-XMLAll\all_classes.xml";
Dictionary<string, List<int>> nodeTable = new Dictionary<string, List<int>>();
using (XmlReader reader = XmlReader.Create(documentPath))
{
while (!reader.EOF)
{
if (reader.NodeType == XmlNodeType.Element)
{
if (!nodeTable.ContainsKey(reader.LocalName))
{
nodeTable.Add(reader.LocalName, new List<int>(new int[] { reader.Depth }));
}
else if (!nodeTable[reader.LocalName].Contains(reader.Depth))
{
nodeTable[reader.LocalName].Add(reader.Depth);
}
}
reader.Read();
}
}
Console.WriteLine("The node table has {0} items.",nodeTable.Count);
foreach (KeyValuePair<string, List<int>> kv in nodeTable)
{
Console.WriteLine("{0} [{1}]",kv.Key, kv.Value.Count);
for (int i = 0; i < kv.Value.Count; i++)
{
if (i < kv.Value.Count-1)
{
Console.Write("{0}, ", kv.Value[i]);
}
else
{
Console.WriteLine(kv.Value[i]);
}
}
}
Çok teşekkürler deneyebilirsiniz ur kök öğesi ise
http://taporware.ualberta.ca/~taporware/xmlTools/listxml.shtml
. LINQ-XML ile famliar değilim. Ama çok iyi çalışıyor. Bir şey daha, yukarıdaki soruyu güncelledim. Çocuk düğümlerini sadeceEğer "Kitap" altında (eğer güncelleştirilmiş soruya göre) kastediyorsunuz - bir şey gibi: doc.Root.Element ("Kitap"). DescendantNodes() ... –
Evet, demek istediğim. Ve kod çalışıyor, tekrar teşekkürler! – Smallville