我需要从一个xml文件创建单个列表,其中有一些来自Parent和Some节点使用Linq的值,然后我需要在UI的单个列表视图中绑定此列表
<item>
<name>AAA</name>
<id>94926DD03DB67FE30B456E50A0C34DF6</id>
<files>
<update>1533861455395</update>
<file>
<name>1532997455395.pdf</name>
<update>1532997455395</update>
</file>
<file>
<name>1533861455395.pdf</name>
<update>1533861455395</update>
</file>
</files>
</item>
<item>
<name>BBB</name>
<id>A16779822115170AECAD570D0139E8F3</id>
<files>
<file>
<name>1530405455395.pdf</name>
<update>1530405455395</update>
</file>
</files>
</item>
代码我写的文件名正确显示但在更新值不返回
public void xml()
{
XDocument loadedData = XDocument.Load(xmlUrl);
var lstBooks = loadedData.Descendants("item").Select(x =>
new
{
FileName = x.Element("name").Value,
Update = x.Elements("files").Select(y => y.Element("update").Value),
}).ToList();
}
我想这就是你想要的(包含文件名和更新值的对象列表):
var lstBooks = loadedData.Descendants("file").Select(x =>
new {
FileName = x.Element("name").Value,
Update = x.Element("update").Value
}).ToList();
如果您需要项目名称和更新列表,请使用以下命令:
var lstBooks = loadedData.Descendants("item").Select(x =>
new {
FileName = x.Element("name").Value,
Update = x.Elements("files").Select(y => y.Element("update").Value).ToList(),
}).ToList();
您必须创建一个平面数据表并填写所有列,如下面的代码:
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("Item Name", typeof(string));
dt.Columns.Add("Item ID", typeof(string));
dt.Columns.Add("Files Update", typeof(string));
dt.Columns.Add("File Name", typeof(string));
dt.Columns.Add("File Update", typeof(string));
XDocument doc = XDocument.Load(FILENAME);
foreach (XElement item in doc.Descendants("item"))
{
string name = (string)item.Element("name");
string itemID = (string)item.Element("id");
foreach (XElement files in item.Elements("files"))
{
string filesUpdate = (string)files.Element("update");
foreach (XElement file in files.Elements("file"))
{
string filename = (string)file.Element("name");
string fileUpdate = (string)file.Element("update");
dt.Rows.Add(new object[] { name, itemID, filesUpdate, filename, fileUpdate });
}
}
}
}
}
}