我需要将字符串设置为类似
的字符串<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循环有什么问题?
(我已经检查过sort's Fee有不同的值,问题必须是双foreach循环)
由于
答案 0 :(得分:2)
在外部循环中使用空字符串初始化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())));
答案 1 :(得分:2)
为什么不尝试这样,你总是可以使用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();
}
将您的班级设为xml字符串
同时检查:Convert a C# object to XML?
Linq To 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))
))
);