我有一个xml列表,我想在DataGridView中显示,问题在于列表有子列表,我不能设法显示子表和父表的行。
XML
<ArrayOfTranslationMemory>
<TranslationMemory>
<Comment>coment</Comment>
<Client>FINMA-Eidgenössische Finanzmarktaufsicht</Client>
<Path>/TM-German/FINMA-English-German/FINMA-English-German</Path>
<segment>3796</segment>
<Exists>true</Exists>
<Valid>false</Valid>
<NeedsConvert>true</NeedsConvert>
<NewName>FINMA-[en-DE]-German(Swiss)</NewName>
<Name>FINMA-English-German</Name>
<ActualLanguagePair>
<targetLanguage>de-DE</targetLanguage>
<sourceLanguage>en-GB</sourceLanguage>
</ActualLanguagePair>
<DesiredLanguagePair>
<targetLanguage>de-CH</targetLanguage>
<sourceLanguage>en-DE</sourceLanguage>
</DesiredLanguagePair>
</TranslationMemory>
<TranslationMemory>
<Comment>coment</Comment>
<Client>FINMA-Eidgenössische Finanzmarktaufsicht</Client>
<Path>/TM-English/FINMA-French-English/FINMA-French-English</Path>
<segment>186</segment>
<Exists>true</Exists>
<Valid>true</Valid>
<NeedsConvert>true</NeedsConvert>
<NewName>FINMA-French(Swiss)-English</NewName>
<Name>FINMA-French-English</Name>
<ActualLanguagePair>
<targetLanguage>en-GB</targetLanguage>
<sourceLanguage>fr-FR</sourceLanguage>
</ActualLanguagePair>
<DesiredLanguagePair>
<targetLanguage>en-GB</targetLanguage>
<sourceLanguage>fr-CH </sourceLanguage>
</DesiredLanguagePair>
</TranslationMemory>
</ArrayOfTranslationMemory>
我希望得到一张这样的表
| Comment | Client | Path | segments | Exists | Valid | NeedsConvert | NewName | Name | ActualL-Target | ActualL-Source | DesiredL-Target | DesiredL-Source |
有人可以告诉我如何将ActualLanguagePair和DesiredLanguagePair添加到主表中吗?
答案 0 :(得分:1)
尝试以下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Xml;
using System.Xml.Linq;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
const string FILENAME = @"c:\temp\test.xml";
DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
dt.Columns.Add("Comment", typeof(string));
dt.Columns.Add("Client", typeof(string));
dt.Columns.Add("Path", typeof(string));
dt.Columns.Add("Segment", typeof(int));
dt.Columns.Add("Exists", typeof(Boolean));
dt.Columns.Add("Valid", typeof(Boolean));
dt.Columns.Add("Needs Convert", typeof(Boolean));
dt.Columns.Add("New Name", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Actual Target Language", typeof(string));
dt.Columns.Add("Actual Source Language", typeof(string));
dt.Columns.Add("Desired Target Language", typeof(string));
dt.Columns.Add("Desired Source Language", typeof(string));
XDocument doc = XDocument.Load(FILENAME);
foreach (XElement translationMemory in doc.Descendants("TranslationMemory"))
{
dt.Rows.Add(new object[] {
(string)translationMemory.Element("Comment"),
(string)translationMemory.Element("Client"),
(string)translationMemory.Element("Path"),
(int)translationMemory.Element("segment"),
(Boolean)translationMemory.Element("Exists"),
(Boolean)translationMemory.Element("Valid"),
(Boolean)translationMemory.Element("NeedsConvert"),
(string)translationMemory.Element("NewName"),
(string)translationMemory.Element("Name"),
(string)translationMemory.Element("ActualLanguagePair").Element("targetLanguage"),
(string)translationMemory.Element("ActualLanguagePair").Element("sourceLanguage"),
(string)translationMemory.Element("DesiredLanguagePair").Element("targetLanguage"),
(string)translationMemory.Element("DesiredLanguagePair").Element("sourceLanguage")
});
}
dataGridView1.DataSource = dt;
}
}
}