2016-05-07 8 views
0

Ich habe eine sehr lange XML-Datei und ich muss identifizieren, was der eindeutige TagName in dieser XML-Datei ist. Ich frage mich, ob ich es in meiner C# -Anwendung mit XmlDocument-Bibliothek erhalten kann.Kann ich eine eindeutige Liste von XML TagName mit C# erhalten?

In diesem Beispiel xml, möchte ich alle TagName finden: Buchhandlung, Buch Genre, Titel, Vorname

<bookstore> 
    <book genre="novel"> 
    <title>The Autobiography of Benjamin Franklin</title>  
    </book> 
    <book genre="novel"> 
    <title>The Confidence Man</title> 
    <first-name>Herman</first-name> 
    </book> 
</bookstore> 

Antwort

0

Parse es als XDocument und man konnte dies tun:

var names = doc.Descendants().Select(e => e.Name.LocalName).Distinct(); 

Dies wird Ihnen die Ergebnisse (in einer bestimmten Reihenfolge):

bookstore 
book 
title 
first-name 

Andernfalls, wenn Sie verwenden müssen, ein XmlDocument, könnten Sie dies tun:

var names = doc.DocumentElement 
    .SelectNodes("//*").Cast<XmlNode>() 
    .Select(e => e.LocalName) 
    .Distinct(); 
0

Sie HashSet verwenden können unterschiedliche Namen zu bekommen. Außerdem ist es sehr schnell.

var doc = XDocument.Load("test.xml"); 
var set = new HashSet<string>(); 

foreach (var node in doc.Descendants()) 
{ 
    set.Add(node.Name.LocalName); 

    foreach (var attr in node.Attributes()) 
     set.Add(attr.Name.LocalName); 
} 

foreach (var name in set) 
    Console.WriteLine(name);