Как перечислить элемент XML через XDocument в C #? - PullRequest
1 голос
/ 29 января 2012

Я прочитал здесь много тем, касающихся xml, и пробовал некоторые, но все же не могу решить эту проблему.
Я должен перечислить «Элементы» из моего XML-файла и загрузить его в ListView. Мой проект сделан в Pocket-PC. Вот пример содержания XML.

<? xml version="1.0" encoding="utf-8" ?>
<Library>
    <Item>
        <Name>Picture</Name>
        <FullPath>\My Device\My Documents\Picture</FullPath>
        <SystemFullpath>\Program Files\Explorer\Library</SystemFullpath>
        <Created>0001-01-01T00:00:00</Created>
    </Item>
    <Item>
        <Name>Video</Name>
        <FullPath>\My Device\My Documents\Video</FullPath>
        <SystemFullpath>\Program Files\Explorer\Library</SystemFullpath>
        <Created>0001-01-01T00:00:00</Created>
    </Item>
    <Item>
        <Name>File</Name>
        <FullPath>\My Device\My Documents\File</FullPath>
        <SystemFullpath>\Program Files\Explorer\Library</SystemFullpath>
        <Created>0001-01-01T00:00:00</Created>
    </Item>
</Library>  

Способ добавления предмета:

public bool AddLibrary(Library lib)
{
    try
    {
        XDocument xDoc = XDocument.Load(fileName);
        XElement xe = new XElement("Item",
            new XElement("Name", lib.Name),
            new XElement("Fullpath", lib.Fullpath),
            new XElement("SystemFullpath", lib.SystemFullpath),
            new XElement("Created", lib.Created));

        xDoc.Element("Library").Add(xe);
        xDoc.Save(fileName);
        return true;
    }
    catch { return false; }
}  

Объект библиотеки:

public class Library
{
    public Library() { }

    // Unique
    public string Name { get; set; }

    public string Fullpath { get; set; }

    public string SystemFullpath { get; set; }

    public DateTime Created { get; set; }

    public List<Items> Items { get; set; }
}  

И код для получения предметов, который возвращает ошибку:

public List<Library> RetrieveAllLibrary()
{
    List<Library> libList = new List<Library>();
    if (File.Exists(fileName))
    {
        XDocument xDoc = XDocument.Load(fileName);

        var items = from item in xDoc.Descendants("Item")
                    select new
                    {
                        Name = item.Element("Name").Value,
                        FullPath = item.Element("FullPath").Value,
                        Created = item.Element("Created").Value
                    };

        if (items != null)
        {
            foreach (var item in items)
            {
                Library lib = new Library();
                lib.Name = item.Name;
                lib.Fullpath = item.FullPath;
                lib.Created = DateTime.Parse(item.Created);
                libList.Add(lib);
            }
        }
    }
    return libList;
}  

Ошибка говорит:

enter image description here

Надеюсь, я бы все хорошо объяснил. Спасибо за помощь !!

1 Ответ

2 голосов
/ 29 января 2012

Ваша проблема в этой строке:

new XElement("Fullpath", lib.Fullpath),

Имя набирается строчными буквами "p", а позже вы использовали "FullPath" с заглавной буквой "P".

Вам также следует заменить все «Fullpath» на «FullPath» в XML-файле, если вы хотите сохранить данные.

...