2017-02-23 24 views
1

私は、.xmlファイルから何かをフィルタリングし、必要なものを取り出してDataGridViewに入れる方法を見つけようとしています。 <Names><Username>test</Username></Names>で簡単な.xmlファイルを作成すると、これが機能します。XMLファイルをフィルタで解析する

私が抱えている問題は、より複雑なXMLファイルをソートすることです。私は、フォームのページを持っているとbutton_clickアクションは、DataGridViewに情報を送信するために、これを使用しています。

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   
} 

これは、XMLファイルのごく一部である私がで

<?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> 

をフィルタリングしようとしています私はDataGridViewに2行の情報を表示させようとしています。

||最大ターボ周波数|| 4.00 ||

誰でも提供できる情報は素晴らしいと思います。

+0

ああ、私はまだコードを掲示に使用を取得していますありがとうございました。ダッシュは、私が行ブロックを最小限に抑えるだけであると思うXMLコードをコピーしたときにフォームに来る必要があります。 –

+0

あなたも最初の行をコピーしてください。そうでなければ、xmlファイルは名前空間宣言がないために解析できません – user287107

+0

ここではトップ部分が残念です。 –

答えて

0

xmlファイルは非常に複雑で、異なる名前空間も含まれているようです。

あなたは、これはすべての細胞を解析したDataGridViewに行として挿入する、のXPath構文解析を試すことができます。

 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私はxpathの解析について読んでいますので、どのように機能しているのかを理解し、動作させることができます。ありがとうございました。 –

+0

これについてもう少し調査した後、私はhtmlの敏捷性パッケージを見つけました。これを読んだ後で、これは、ファイルがどの形式であるか心配することなく、Webページ自体から必要なデータを得ることができるので、これをより良い選択肢にすることができました。ページ上のHTML解析を使用して、私は私が探していたデータを私に与えたくなかった。私は正しい道を私に指摘するのを手伝った人々のおかげです。 –