2017-02-23 4 views
1

Ich versuche herauszufinden, wie man Zeug aus einer .xml-Datei herausfiltern und das Zeug, das ich will, in eine DataGridView einfügen. Ich kann das funktionieren, wenn ich eine einfache .xml-Datei mit <Names><Username>test</Username></Names> mache.Parsing einer XML-Datei mit einem Filter

Das Problem, das ich habe, ist das Sortieren einer komplexeren XML-Datei. Ich habe eine Formularseite und eine button_click Aktion verwendet dann diese die Informationen an die DataGridView zu senden:

private void button1_Click(object sender, EventArgs e) 
{   
    DataSet dsload = new DataSet(); 
    dsload.ReadXml("C:\\Users\\VSBox\\Desktop\\test1.xml"); 
    dgvParseProc.DataSource = dsload.Tables[0]; 
    //dgvParseProc.DataMember = "<ss:Row>"; //failed test filter   
} 

Dies ist ein kleiner Teil der XML-Datei Ich versuche, um herauszufiltern

<?xml version="1.0"?> 
<?mso-application progid="Excel.Sheet"?> 
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns="urn:schemas-microsoft-com:office:spreadsheet"> 
<ss:Styles> 
<ss:Worksheet ss:Name="Sheet1"> 
<ss:Table> 
<Column ss:autofitwidth="1"/> 
<Column ss:autofitwidth="1"/> 
<ss:Row ss:StyleID="1"> 
<ss:Cell ss:MergeAcross="2"> 
<ss:Data ss:Type="String"> ARK | Compare Intel® Products </ss:Data> 
</ss:Cell> 
</ss:Row> 
    <ss:Row> 
     <ss:Cell ss:StyleID="s22"> 
     <ss:Data ss:Type="String">Max Turbo Frequency</ss:Data> 
     </ss:Cell> 
     <ss:Cell ss:StyleID="s22"> 
     <ss:Data ss:Type="String">4.00 GHz</ss:Data> 
     </ss:Cell> 
    </ss:Row> 

In Am Ende versuche ich, die DataGridView 2 Zeilen mit der Info zu zeigen.

|| Maximale Turbofrequenz || 4.00 ||

Alle Informationen, die jemand zur Verfügung stellen kann, wären großartig.

+0

Ah danke ich noch Gebrauch immer auf die Entsendung Code bin. Die Bindestriche müssen kommen, wenn ich den XML-Code kopiere, denke ich, dass diese nur den Zeilenblock minimieren sollen. –

+0

kannst du bitte auch die erste Zeile kopieren, sonst ist die XML-Datei wegen der fehlenden Namespace-Deklaration nicht analysierbar – user287107

+0

Entschuldigung, dass hier der obere Teil steht. –

Antwort

0

Die XML-Datei scheint sehr komplex zu sein, auch mit einem anderen Namespaces.

können Sie die XPath-Syntaxanalyse versuchen, diese alle Zellen analysieren würde und als Zeilen in einem Datagridview einfügen:

 var source = @"<?xml version='1.0' encoding='utf-8'?> 
     <ss:Row> 
      <ss:Cell ss:StyleID='s22'> 
      <ss:Data ss:Type='String'>Max Turbo Frequency</ss:Data> 
      </ss:Cell> 
      <ss:Cell ss:StyleID='s22'> 
      <ss:Data ss:Type='String'>4.00 GHz</ss:Data> 
      </ss:Cell> 
     </ss:Row>";; 

     // load document without namespaces 
     var doc = new XmlDocument(); 
     using (var r = new StringReader(source)) 
     using (var xReader = new XmlTextReader(r)) 
     { 
      xReader.Namespaces = false; 

      doc.Load(xReader); 
     } 
     // select all sub nodes, then all inner nodes, then take the text 
     // create a list with anonymous objects containing the text value 
     dataGridView1.DataSource = 
      doc.SelectNodes("/*/*/*/text()").OfType<XmlNode>().Select(n => new { Value = n.Value }).ToList(); 
+0

ok Ich werde auf Xpath Parsing lesen gehen, damit ich besser verstehen kann, wie es funktioniert und sehen, ich kann es zum Funktionieren bringen. Vielen Dank. –

+0

nachdem ich etwas mehr Forschung dazu getan habe, bin ich auf html Agility-Paket gestoßen. Nachdem ich das gelesen hatte, fand ich, dass dies eine bessere Option war, da ich die benötigten Daten direkt von der Webseite abrufen konnte, ohne sich darum kümmern zu müssen, in welchem ​​Format die Datei war. Mit einem HTML-Parser auf der Seite und dem Ausfiltern Ich wollte nicht, dass ich die Daten bekam, nach denen ich suchte. Ich wollte mich nur bei den Leuten bedanken, die mir geholfen haben, den richtigen Weg einzuschlagen. –

Verwandte Themen