我正在使用一个小工具。它将采用各种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不是这个的理想控件吗?
我不知道如果DataGrid支持它,但你可以尝试添加两个表之间的关系,看是否在DataGrid然后以亲子格式显示它。否则,您可能需要手动非规范化数据(这将是一个简单的Linq查询)。 – 2015-01-26 23:09:59
@DStanley我明白了。我想我可以加一个关系,但这只是一个例子。我不会提前知道我将用作输入的xml类型,所以它看起来不像我可以在必要时以通用方式添加这些关系(除非我错过了某些东西)。 – Flack 2015-01-27 01:28:58