假设我有一个由第三方生成的* .csv,无法更改。
<Fruit>
<Apple></Apple>
</Fruit>
<Fruit>
<Orange></Orange>
</Fruit>
<Animal>
<Dog></Dog>
</Animal>
<Animal>
<Cat></Cat>
</Animal>
使用Generate XML from CSV Files中描述的教程,我无法删除第一行并获得以下内容:
<Project Name="ProjectName">
<Fruit>
<Apple></Apple>
<Orange></Orange>
</Fruit>
<Animal>
<Dog></Dog>
<Cat></Cat>
</Animal>
</Project>
虽然我想实现以下目标,但找不到任何资源或教程来理解这样做:
public class SeprateClickListener implements View.OnClickListener {
private Context context;
public SeprateClickListener(Context context) {
this.context = context;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnOne:
break;
case R.id.btnTwo:
break;
}
}
}
答案 0 :(得分:1)
假设文件的第一行始终是名称,请先读取该行,然后将其余部分作为CSV处理。读完行后,按适当的列对它们进行分组,然后构建XML。
XDocument GetXml(string path)
{
using (var file = File.OpenText(path))
{
var name = file.ReadLine();
return new XDocument(
new XElement("Project",
new XAttribute("Name", name),
from row in ReadRows(file)
group row.Item2 by row.Item1 into g
select new XElement(g.Key,
from r in g
select new XElement(r)
)
)
);
}
}
IEnumerable<Tuple<string, string>> ReadRows(TextReader file)
{
using (var reader = new CsvReader(file, new CsvConfiguration { HasHeaderRecord = false, TrimFields = true }))
{
while (reader.Read())
yield return Tuple.Create(reader.GetField(0), reader.GetField(1));
}
}