Чтение узла XML из C #, когда это ресурс в XAML - PullRequest
0 голосов
/ 27 января 2012

У меня возникли проблемы со следующим. Я новичок, и, наверное, поэтому.

У меня есть список, в котором отображаются некоторые изображения, он получает пути к этим изображениям из файла XML. Этот файл XML определен как ресурс в XAML. Если изображение выбрано и пользователь нажимает клавишу ввода, я хочу запустить внешнее приложение с некоторыми параметрами, включая путь, найденный в другом узле этого файла XML (appath в приведенном ниже примере).

XML-макет:

<picture>
   <path></path>
   <appath></appath>
</picture>

Я не могу найти способ получить доступ к узлу из C #. Любые указатели очень ценятся!

Спасибо заранее, J.

Ответы [ 2 ]

0 голосов
/ 27 января 2012

Предполагается, что ваш XML-файл выглядит примерно так:

<?xml version="1.0" encoding="ISO-8859-1"?>
<pictures>
 <picture>
   <path></path>
   <appath></appath>
 </picture>
</pictures>

Если ваш ресурс называется Pictures:

XElement resource = XElement.Parse(Properties.Resources.Pictures);

Используя эти расширения: (просто скопируйте класс / файл в коренькаталог вашего проекта) http://searisen.com/xmllib/extensions.wiki

public class PicturesResource
{
    XElement self;
    public PicturesResource()
    { self = XElement.Parse(Properties.Resources.Pictures); }

    public IEnumerable<Picture> Pictures
    { get { return self.GetEnumerable("picture", x => new Picture(x)); } }
}

public class Picture
{
    XElement self;
    public Pictures(XElement self) { this.self = self; }

    public string Path { get { return self.Get("path", string.Empty); } }
    public string AppPath { get { return self.Get("apppath", string.Empty); } }

}

Затем вы можете связать картинки или посмотреть на них:

PicturesResource pictures = new PicturesResource();
foreach(Picture pic in pictures.Pictures)
{
    string path = pic.Path;
    string apppath = pic.AppPath;
}

Или найти конкретную картинку:

Picture pic = pictures.FirstOrDefault(p => p.Path = "some path");
if(pic != null)
{
    // do something with pic
}
0 голосов
/ 27 января 2012

Если у вас нет каких-либо атрибутов в узле изображения (какой-то идентификатор), вы должны сначала найти путь, который уже должен быть в вашем списке, а затем вернуть аппат.

static string GetAppath(string xmlString, string picPath)
    {
        string appath = String.Empty;
        XmlDocument xDoc = new XmlDocument();
        xDoc.LoadXml(xmlString);

        XmlNodeList xList = xDoc.SelectNodes("/picture");
        foreach (XmlNode xNode in xList)
        {
            if (xNode["path"].InnerText == picPath)
            {
                appath = xNode["appath"].InnerText;
                break;
            }
        }
        return appath;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...