У меня есть xml, который имеет смесь узлов и узлов с атрибутами, как показано ниже
<?xml version="1.0" encoding="utf-8"?>
<Root>
<StudentRequestList count="3">
<StudentRequest>
<StudentFirstName>Test1</StudentFirstName>
<StudentLastName>TestLastName</StudentLastName>
<StudentGrade>3</StudentGrade>
<StudentHomeroomTeacher>WhiteTest1</StudentHomeroomTeacher>
<VariableData>
<Variable name="Email">test@email.com</Variable>
<Variable name="Hobby1">TestHobby1</Variable>
<Variable name="Hobby2">TestHobby2</Variable>
<Variable name="Hobby3">TestHobby3</Variable>
<Variable name="satscore">satscoreTest1</Variable>
<Variable name="kprepscore">krepscore1</Variable>
</VariableData>
</StudentRequest>
<StudentRequest>
<StudentFirstName>Test2</StudentFirstName>
<StudentLastName>TestLastName2</StudentLastName>
<StudentGrade>3</StudentGrade>
<StudentHomeroomTeacher>WhiteTest1</StudentHomeroomTeacher>
<VariableData>
<Variable name="Email">test2@email.com</Variable>
<Variable name="Hobby5">TestHobby5</Variable>
<Variable name="Hobby6">TestHobby6</Variable>
<Variable name="Hobby3">TestHobby3</Variable>
<Variable name="satscore">satscoreTest2</Variable>
<Variable name="kprepscore">krepscore2</Variable>
</VariableData>
</StudentRequest>
<StudentRequest>
<StudentFirstName>Test1</StudentFirstName>
<StudentLastName>TestLastName</StudentLastName>
<StudentGrade>3</StudentGrade>
<StudentHomeroomTeacher>WhiteTest1</StudentHomeroomTeacher>
<VariableData>
<Variable name="Email">test@email.com</Variable>
<Variable name="Hobby4">TestHobby4</Variable>
<Variable name="Hobby2">TestHobby2</Variable>
<Variable name="Hobby3">TestHobby3</Variable>
<Variable name="satscore">satscoreTest3</Variable>
<Variable name="kprepscore">krepscore3</Variable>
</VariableData>
</StudentRequest>
</StudentRequestList>
</Root>
CSV должен выглядеть ниже
StudentFirstName,StudentLastName,StudentGrade,StudentHomeroomTeacher,Email, Hobby1, Hobby2,Hobby3, Hobby4, Hobby5, Hobby6, satscore, kprepscore
Test1,TestLastName,3,WhiteTest1,test@email.com,TestHobby1,TestHobby2,TestHobby3,,,,satscoreTest1,krepscore1
Test2,TestLastName2,3,WhiteTest1,test2@email.com,,,Hobby3,,Hobby5,Hobby6,satscoreTest2,krepscore2
Test1,TestLastName,3,WhiteTest1,test@email.com,,Hobby2,Hobby3,Hobby4,,,satscoreTest3,krepscore3
Я могу извлечь значения для узлов без атрибутов (как показано в коде ниже), но для других узлов с атрибутами (variabledata / variable), пытающихся получить значения, чтобы я мог создать файл csv, как показано выше. Любые предложения приветствуются. Спасибо.
XDocument custOrd = XDocument.Load(FILENAME);
string csv =
(from el in custOrd.Element("Root").Element("StudentRequestList").Elements("StudentRequest")
select
String.Format("{0},{1},{2},{3},{4}{5}",
(string)el.Element("StudentFirstName"),
(string)el.Element("StudentLastName"),
(string)el.Element("StudentGrade"),
(string)el.Element("StudentHomeroomTeacher"),
el.Element("VariableData").Element("Variable").Attribute("name").Value.Equals("Email") ? (string)el.Element("VariableData").Element("Variable") : null,
Environment.NewLine
)
)
.Aggregate(
new StringBuilder(),
(sb, s) => sb.Append(s),
sb => sb.ToString()
);
Console.WriteLine(csv);
Console.ReadLine();