2016-05-26 9 views
0

wie xml-Datei gelesen Nummer und Datum-Zeit alle Verzeichnisse und Unterverzeichnisse.i haben txtnumber und txtdatetime, und suchen Sie alle Verzeichnisse und erhalten xmldata Namen von meiner search.i wollen erhalten 890001000011717.wavwie xmlfile Daten zu lesen und Nummer und datetime

var allfiles = Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories); 

foreach (var item in allfiles) 
{ 
    DateTime lastModified = System.IO.File.GetLastWriteTime(item); 

    string extension; 

    extension = Path.GetExtension(item); 

    if (lastModified.ToShortTimeString() == user_time2.ToShortTimeString() && extension == ".xml") 
    { 
     XmlReader xmlFile; 
     xmlFile = XmlReader.Create(item, new XmlReaderSettings()); 
     DataSet dss = new DataSet(); 
     DataView dv; 
     dss.ReadXml(xmlFile); 

     string ss = dss.Tables[0].Rows[0]["dataformat"].ToString(); 

     string number = dss.Tables["Party"].Rows[1]["number"].ToString(); 
    } 
} 

Die XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<recording> 
    <starttime>2016-05-13 15:03:14:000 +0100</starttime> 
    <endtime>2016-05-13 15:04:59:000 +0100</endtime> 
    <calldirection>Incoming</calldirection> 
    <filename>890001000011717.wav</filename> 
    <recordingowners> 
     <recordingowner>202</recordingowner> 
    </recordingowners> 
    <parties> 
     <party id="1"> 
      <number>0711111111</number> 
      <pstarttime>2016-05-13 15:05:00:703 +0100</pstarttime> 
      <pendtime>2016-05-13 15:05:00:703 +0100</pendtime> 
     </party> 
    </parties> 
</recording> 

enter image description here enter image description here

+0

Recurse die Ordner und Unterordner mit http://stackoverflow.com/questions/ 929276/wie-zu-rekursiv -list-all-the-Dateien-in-einem-Verzeichnis-in-c und verwenden XPATH auf jedem https://msdn.microsoft.com/en-us/library/hcebdtae(v=vs.110).aspx –

+0

Ich habe txtnumber und txtdatetime und suche alle Verzeichnisse und bekomme xmldata im Namen meiner Suche. –

Antwort

1

Sie kann dies leicht tun, indem Sie die XML-Datei in C# -Objekte deserialisieren und dann verwenden.

Zuerst werden die Klassen erstellen müssen, die Ihre XML deserialisieren in werden (Sie können dies ganz einfach tun Visual Studio Menü Bearbeiten -> Inhalte einfügen -> Einfügen von XML als Klassen):

[XmlType(AnonymousType = true)] 
[XmlRoot(Namespace = "", IsNullable = false)] 
public class recording 
{ 
    public string starttime { get; set; } 

    public string endtime { get; set; } 

    public string calldirection { get; set; } 

    public string filename { get; set; } 

    [XmlArray] 
    [XmlArrayItem("recordingowner", IsNullable = false)] 
    public byte[] recordingowners { get; set; } 

    [XmlArrayItem("party", IsNullable = false)] 
    public recordingParty[] parties { get; set; } 
} 


[XmlType(AnonymousType = true)] 
public class recordingParty 
{ 
    public string number { get; set; } 

    public string pstarttime { get; set; } 

    public string pendtime { get; set; } 

    [XmlAttribute] 
    public int id { get; set; } 
} 

dann Liste nur die xML-Dateien mit *.xml statt *.* und deserialisieren auf sie zugreifen dann die Eigenschaften, die Sie benötigen, wie jede andere C# Objekt:

var allfiles = Directory.GetFiles(path, "*.xml", SearchOption.AllDirectories); 

var serializer = new XmlSerializer(typeof(recording)); 
foreach (var item in allfiles) 
{ 
    var lastModified = File.GetLastWriteTime(item); 

    if (lastModified.ToShortTimeString() != user_time2.ToShortTimeString()) continue; 

    recording recording; 
    using (var reader = new StreamReader(item)) 
    { 
     recording = (recording) serializer.Deserialize(reader); 
    } 

    string number = recording.parties[0].number; 
} 
+0

danke für deine Antwort ... Sir ich habe meinen Beitrag bearbeiten bitte überprüfen –

Verwandte Themen