2015-01-26 87 views
0

我正在使用一個小工具。它將採用各種xml字符串作爲輸入。我想要做的是將xml(我們可以假設它是格式良好的)轉換成表格格式。以表格格式顯示XML

我的第一個想法是使用WPF DataGrid。我嘗試瞭如下所示:

string xmlString = @"<?xml version=""1.0"" encoding=""utf-8"" ?> 
      <Movies xmlns=""""> 
       <Movie Name=""Seven Samurai"" Id=""101"" Director=""Akira Kurosawa""> 
        <Comment Value=""1""/> 
       </Movie> 
       <Movie Name=""Happy Together"" Id=""102"" Director=""Wong Kar Wai""> 
        <Comment Value=""2""/> 
       </Movie> 
       <Movie Name=""Shoot The Piano Player"" Id=""103"" Director=""Francois Truffaut""> 
        <Comment Value=""3""/> 
       </Movie> 
       <Movie Name=""Roshomon"" Id=""104"" Director=""Akira Kurosawa""> 
        <Comment Value=""4""/> 
       </Movie> 
       <Movie Name=""Dead Man"" Id=""105"" Director=""Jim Jarmusch""> 
        <Comment Value=""5""/> 
       </Movie> 
       <Movie Name=""Children of Heaven"" Id=""106"" Director=""Majid Majidi""> 
        <Comment Value=""6""/> 
       </Movie> 
      </Movies>"; 

var sr = new StringReader(xmlString); 
var dataSet = new DataSet(); 
dataSet.ReadXml(sr); 
_dataGrid.ItemsSource = dataSet.Tables[0].DefaultView; 

這將填充數據網格,但它只會顯示父行。子元素不會出現。這是因爲這些元素被放入dataSet的另一個表(dataSet.Tables [1])。

我需要的是以表格格式顯示xml的只讀顯示。一些排序/過濾能力會很好,但我不知道如何(或者如果有可能)以一種明智的父 - 子格式將DataSet中的DataSet中的所有表放置在某個位置。

我不知道XML的格式,所以我正在尋找一個儘可能通用的解決方案。

也許DataGrid不是這個的理想控件嗎?

+0

我不知道如果DataGrid支持它,但你可以嘗試添加兩個表之間的關係,看是否在DataGrid然後以親子格式顯示它。否則,您可能需要手動非規範化數據(這將是一個簡單的Linq查詢)。 – 2015-01-26 23:09:59

+0

@DStanley我明白了。我想我可以加一個關係,但這只是一個例子。我不會提前知道我將用作輸入的xml類型,所以它看起來不像我可以在必要時以通用方式添加這些關係(除非我錯過了某些東西)。 – Flack 2015-01-27 01:28:58

回答

0

您可以使用XSLT轉換通過節點進行迭代,以轉換成表格格式

+0

謝謝。你有我能做到這一點的樣本,也許在原始文章中使用示例xml? – Flack 2015-01-27 01:29:44