2017-03-26 2 views
1

Guten Abend! Ich habe eine mehrstufige XML-Datei, aus der ich einige Daten extrahieren und dann wieder in eine CSV-Datei spucken muss. Ich habe mit der Extraktion der spezifischen Daten gekämpft, die ich brauche. Ich habe meine XML-Abfrage an den Punkt gebracht, an dem ich die Daten zurückbekomme, die ich brauche, aber ich bin unsicher, wie ich die spezifischen Daten, die ich brauche, aus den fraglichen Daten herausholen kann.Erhalten von Werten aus XML unter Verwendung der Where-Klausel

Was muss ich der unten aus wie mein Endergebnis ist die folgende ...

Für jede Person, Knoten, ich brauche die folgenden Stücke von Daten zu identifizieren und aufzuzeichnen sie die Exportdatei zu erstellen. Dies würde in einer foreach-Schleife über eine große Anzahl von Personendatensätzen laufen.

var emailAddress - Dies ist Benutzer + '@' + Registrierung wo Zuordnung == Typ "2" I.E. [email protected]

var alias - Der nächste Teil ist der Alias ​​- Das kommt aus dem Personenknoten und ist Benutzer, wo Zuordnung == Typ "1" I.E. test1

var Servername - Der letzte Teil, der extrahiert werden soll, ist der Servername, der sich in demselben Personentag befindet und in der Registrierung registriert ist, wobei type == "1" I.E. servername.fqdn

Ich werde dann einen StringBuilder verwenden, um alle diese auf jeder foreach zu verbinden, um die gewünschte Ausgabe zu geben.

Ich werde den Domain-Namen oder Server-Namen vor der Ausführung der Tools in der Datei nicht kennen. Es könnte auch innerhalb der Datei variieren, weshalb diese nicht einfach fest codiert sind.

Mein aktueller Code gibt die vollständige Verknüpfungsinformation unten zurück.

Ich schätze sehr jede Hilfe. Ich habe eine Menge von hier gelernt und schätze euch alle sehr.

Meine XML-Datei sieht aus wie

<eim server="servername" timestamp="1489506332830"> 
<domain name="domainname" description="domainanme"> 
    <registry name="servername" type="2342.52342.123-caseIgnore" kind="1" description="Created by wizard."> 
    <alias type="Other">passwordMap=false</alias> 
    <alias type="DnsHostName">servername</alias> 
    </registry> 
    <registry name="domainanme" type="2342.52342.123-caseIgnore" kind="1" description="Created by wizard."> 
    <alias type="KerberosRealm">domainnamee</alias> 
    <alias type="Other">passwordMap=false</alias> 
    </registry> 
    <person name="tuser" description="Test User"> 
    <association type="1" registry="servername.fqdn" user="test1"/> 
    <association type="2" registry="domainname.tld" user="testuser"/> 
    </person> 
    <person name="tuser2" description="Test User2"> 
    <association type="1" registry="servername.fqdn" user="test2"/> 
    <association type="2" registry="domainname.tld" user="testuser2"/> 
    </person> 

Mein aktueller Code

  XmlDocument doc = new XmlDocument(); 
     doc.Load("c:\\temp\\eimexport.eiml"); 

     List<string> testing = new List<string>(); 
     XmlElement eimElement = doc.DocumentElement; 
     XmlNodeList eimNodes = eimElement.SelectNodes("/eim/domain/person"); 

     foreach (XmlNode parseEimNode in eimNodes) 
     { 

      testing.Add(parseEimNode.InnerXml); 

     } 


     foreach (var s in testing) 
     { 
      Console.WriteLine(s); 
     } 

     Console.ReadLine(); 

Antwort

1

ist Da Sie XmlDocument verwenden, können Filterung mithilfe von XPath tun Prädikat Ausdruck (Ausdruck in []):

foreach (XmlNode parseEimNode in eimNodes) 
{ 
    var email = parseEimNode.SelectSingleNode("association[@type=2]"); 
    var user = email.GetAttribute("user"); 
    var domain = email.GetAttribute("registry"); 

    var server = parseEimNode.SelectSingleNode("association[@type=1]"); 
    var _alias = server.GetAttribute("user"); 
    var servername = server.GetAttribute("registry"); 

    // process all information gathered so far accordingly 

} 
+0

Ich musste eine kleine Änderung vornehmen, aber das hat mich auf der rechten Seite Spur! Ich brauchte 'email.Attributes [" Benutzer "]. Value;' Und so weiter anstelle von GetAttributes. Ich danke dir sehr! – Spartenos

Verwandte Themen