Я хочу использовать LINQ для преобразования XML для вывода в текстовый файл, выполнив GROUPBY в поле "банк".
Я хочу вывести ниже, используя C# linq
First National B0020000045603 GSinclair 408999703657 CH Fourways 002750001122012 THenderson 401255489873 CH Edenvale 001810313122012 ABSA 0040000146162 ZWhitehead 409122372301 CH Irene 000702501122012 KCooke 409155874935 SAVSouthdowns009758901012013 BJames 409254998 SAVMelville 002077409122012 SLane 409771987 SAVRoodepoort002077431122012
XML-файл, в котором я читаю данные
---DebitOrder.xml----
<debitorders> <deduction> <accountholder>Georgina Sinclair</accountholder> <accountnumber>408999703657</accountnumber> <accounttype>cheque</accounttype> <bankname>First National Bank</bankname> <branch>Fourways</branch> <amount>275.00</amount> <date>12/01/2012</date> </deduction> <deduction> <accountholder>Zachary Whitehead</accountholder> <accountnumber>409122372301</accountnumber> <accounttype>cheque</accounttype> <bankname>ABSA</bankname> <branch>Irene</branch> <amount>70.25</amount> <date>12/01/2012</date> </deduction> <deduction> <accountholder>Toby Henderson</accountholder> <accountnumber>401255489873</accountnumber> <accounttype>cheque</accounttype> <bankname>First National Bank</bankname> <branch>Edenvale</branch> <amount>181.03</amount> <date>12/13/2012</date> </deduction> <deduction> <accountholder>Katherine Cooke</accountholder> <accountnumber>409155874935</accountnumber> <accounttype>savings</accounttype> <bankname>ABSA</bankname> <branch>Southdowns</branch> <amount>975.89</amount> <date>01/01/2013</date> </deduction> <deduction> <accountholder>Bradley James</accountholder> <accountnumber>409254998</accountnumber> <accounttype>savings</accounttype> <bankname>ABSA</bankname> <branch>Melville</branch> <amount>207.74</amount> <date>12/09/2012</date> </deduction> <deduction> <accountholder>Sophie Lane</accountholder> <accountnumber>409771987</accountnumber> <accounttype>savings</accounttype> <bankname>ABSA</bankname> <branch>Roodepoort</branch> <amount>207.74</amount> <date>12/31/2012</date> </deduction> </debitorders>
Что я уже пробовал:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Xml.Linq; using System.Text; using System.Windows.Forms; using System.Linq; using System.IO; using System.Xml; namespace DebitOrderSolution { public partial class Index : Form { static public string XMLRead() { string onlyContent = ""; DataSet ds = new DataSet(); string Strpath = @"C:\zms\DebitOrders\DebitOrders"; try { ds.ReadXml(Strpath + "\\DebitOrders.xml"); if (ds.Tables.Count != 0) { DataTable dtXml = ds.Tables[0]; foreach (DataRow dr in dtXml.Rows) { onlyContent += dr[0].ToString(); } } } catch { return Environment.MachineName; } return onlyContent; } public Index() { InitializeComponent(); } string onlyContent = string.Empty; private void butAdd_Click(object sender, EventArgs e) { addToXml(); } private void addToXml() { XDocument xmlDoc = XDocument.Load("DebitOrders.xml"); var debitorders = from deduction in xmlDoc.Descendants("deduction") select new { Accountholder = deduction.Element("accountholder").Value, Accountnumber = deduction.Element("accountnumber").Value, Accounttype = deduction.Element("accounttype").Value, Bankname = deduction.Element("bankname").Value, Branch = deduction.Element("branch").Value, Amount = deduction.Element("amount").Value, Date = deduction.Element("date").Value, }; var grouped = from deduction in debitorders group deduction by deduction.Bankname into g select new { Bankname = g.Key, bankname = g.First().Bankname //Accountnumber = g.First().Bankname, //Accounttype = g.First().Bankname, //Branch = g.First().Bankname, //Amount = g.First().Bankname, //Date = g.First().Bankname }; var groupData = new XElement("deduction", from g in grouped select new XElement("bankname", new XElement("Bankname", g.Bankname) //, //new XElement("accountholder", g.Bankname), //new XElement("Accounttype", g.Bankname), //new XElement("Branch", g.Bankname), //new XElement("accountholder", g.Bankname), //new XElement("Amount", g.Bankname), //new XElement("Date", g.Bankname) ) ); //var debitorders = xmlDoc.SelectNodes("debitorders/deduction"); txtResults.Text = ""; foreach (var deduction in debitorders) { onlyContent += string.Concat(txtResults.Text + " " + deduction.Accountholder + "\t"); onlyContent += string.Format(txtResults.Text + " " + deduction.Accountnumber + "\t"); onlyContent += string.Format(txtResults.Text + " " + deduction.Accounttype + "\t"); onlyContent += string.Format(txtResults.Text + " " + deduction.Bankname + "\t"); onlyContent += string.Format(txtResults.Text + " " + deduction.Branch +"\t" ); onlyContent += string.Format ( txtResults.Text + " " + deduction.Date + "\n\n"); } if (txtResults.Text == "") txtResults.Text = "No Results."; File.WriteAllText(@"C:\zms\DebitOrderSolution\DebitOrders.txt", onlyContent); Close(); } private void butReadXML_Click(object sender, EventArgs e) { readXml(); } private void readXml() { XDocument xmlDoc = XDocument.Load("DebitOrders.xml"); var debitorders = from deduction in xmlDoc.Descendants("deduction") select new { Accountholder = deduction.Element("accountholder").Value, Accountnumber = deduction.Element("accountnumber").Value, Accounttype = deduction.Element("accounttype").Value, Bankname = deduction.Element("bankname").Value, Branch = deduction.Element("branch").Value, Amount = deduction.Element("amount").Value, Date = deduction.Element("date").Value, }; txtResults.Text = ""; foreach (var deduction in debitorders ) { txtResults.Text = txtResults.Text + " " + deduction.Accountholder + "\t"; txtResults.Text = txtResults.Text + " " + deduction.Accountnumber + "\t"; txtResults.Text = txtResults.Text + " " + deduction.Accounttype + "\t"; txtResults.Text = txtResults.Text + " " + deduction.Bankname + "\t"; txtResults.Text = txtResults.Text + " " + deduction.Branch + "\t"; txtResults.Text = txtResults.Text + " " + deduction.Date + "\n\n"; } if (txtResults.Text == "") txtResults.Text = "No Results."; } } }
CHill60
Непонятный. Что не так с кодом, который у вас есть? Кстати - не размещайте пустые методы в своем коде, это просто пустая трата места и раздражает
Kingsam3
Он не возвращает вывод по мере необходимости пожалуйста помогите
[no name]
https://www.codeproject.com/Questions/1180808/How-can-I-read-from-XML-and-write-to-a-textfile-us
CHill60
Честно говоря, у этого есть решение, которое не имеет отношения к делу, хотя OP должен был поощрять этого участника удалять свое решение, а не перепечатывать его