同样的结果,输出数据使用双Foreach循环
,当我需要一个字符串设定为这样的事情同样的结果,输出数据使用双Foreach循环
<Student>
<StudentID></StudentID>
<FirstName></FirstName>
<Fees>
<Fee>
<FeeID></FeeID>
</Fee>
</Fees>
</Student>
<Student>
<StudentID></StudentID>
<FirstName></FirstName>
<Fees>
<Fee>
<FeeID></FeeID>
</Fee>
</Fees>
</Student>
... and so on
我的代码
string strFeeData = ""; // XML Content for Fees
string strStuData = ""; // XML Content for Students with Fees
foreach (var studentData in sorted)
{
foreach(Fee feeData in studentData.Fees)
{
strFeeData = strFeeData + "<Fee>\n\t<FeeID>" + feeData.FeeID + "</FeeID>\n\t<FeeName>" + feeData.FeeName + "</FeeName>\n\t<Amount>" + feeData.Amount + "</Amount>\n\t<DueDate>" + feeData.DueDate + "</DueDate>\n</Fee>\n";
}
strStuData = strStuData + "<Student>\n\t<StudentID>" + studentData.StudentID + "</StudentID>\n<FirstName>" + studentData.FirstName + "</FirstName>\n<LastName>" + studentData.LastName + "</LastName>\n<Grade>" + studentData.Grade + "</Grade>\n<Fees>\n\t" + strFeeData + "</Fees></Student>\n";
}
我得到了这部分正确输出
<Student>
<StudentID>1</StudentID>
<FirstName>David</FirstName>
...
<Student>
<StudentID>2</StudentID>
<FirstName>John</FirstName>
但对于费用
<Fees>
<Fee>
<FeeID>12</FeeID>
....
<Fees>
<Fee>
<FeeID>12</FeeID>
我为每个学生收取了相同的费用。
我的双foreach循环出了什么问题?
(我已经选中排序的学费都有不同的价值观,这个问题必须在双foreach循环)
感谢
初始化strFeeData
利用外环内空字符串:
foreach (var studentData in sorted)
{
strFeeData = "";
foreach(Fee feeData in studentData.Fees)
{
strFeeData = strFeeData + "<Fee>\n\t<FeeID>" + feeData.FeeID + "</FeeID>\n\t<FeeName>" + feeData.FeeName + "</FeeName>\n\t<Amount>" + feeData.Amount + "</Amount>\n\t<DueDate>" + feeData.DueDate + "</DueDate>\n</Fee>\n";
}
strStuData = strStuData + "<Student>\n\t<StudentID>" + studentData.StudentID + "</StudentID>\n<FirstName>" + studentData.FirstName + "</FirstName>\n<LastName>" + studentData.LastName + "</LastName>\n<Grade>" + studentData.Grade + "</Grade>\n<Fees>\n\t" + strFeeData + "</Fees></Student>\n";
}
然而,使用字符串连接创建XML真的不好主意!您应该阅读关于序列化或LINQ to XML!
的LINQ to XML版本
var xml = sorted.Select(s => new XElement("Student"
new XElement("StudentID", s.StudentID),
new XElement("FirstName", s.FirstName),
new XElement("LastName", s.LastName),
new XElement("Fees",
s.Fees.Select(f => new XElement("Fee",
new XElement("FeeID", f.FeeID))).ToArray())));
with strFeeData =“”;它使情况变得更糟:现在它显示只有1名学生所有费用 – user1618180 2013-03-13 08:11:09
随着LINQ to XML版本,一旦我有了var xml,我只是textwriter(xml); ?或者如何处理它? – user1618180 2013-03-13 08:17:03
只是'xml.ToString();' – MarcinJuraszek 2013-03-13 08:17:50
你为什么不尝试一下这样的,您可以随时使用XmlSerializer的改造C#对象的列表,以XML文档。
public string ToXML()
{
var stringwriter = new System.IO.StringWriter();
var serializer = new XmlSerializer(this.GetType());
serializer.Serialize(stringwriter, this);
return stringwriter.ToString();
}
这seializ你的类XML字符串
而且检查:Convert a C# object to XML?
Linq到XML的方式
XElement _customers = new XElement("Students",
from c in objCust
orderby c.CustID //descending
select new XElement("Student",
new XElement("name", c.StudentID),
new XElement("ID", c.FirstName),
new XElement("phone", c.LastName),
new XElement("Fees", (from x in x.Fees
orderby x.FeeID//descending
select new XElement("FeeID",x.FeesId))
))
);
我仍然是C#初学者。解释更多?谢谢 – user1618180 2013-03-13 08:08:20
@ user1618180 - 检查在谷歌C#序列化,并检查链接给你你会得到主意 – 2013-03-13 08:09:04
你为什么要手工创建XML?这是一个令人难以置信的容易出错的方法。使用.NET中提供的许多XML API之一 - 理想的是LINQ to XML。 – 2013-03-13 08:03:31
我还是C#初学者> user1618180 2013-03-13 08:08:04
这是我能想到的唯一解决方案 – user1618180 2013-03-13 08:09:21