Разбор XML-документа с использованием .Descdents (значение)

Я пытаюсь проанализировать XML-документ, который я создал. Однако xml.Descendants(value) не работает, если value имеет определенные символы (включая пробел, что является моей проблемой).

Мой xml структурирован следующим образом:

<stockists>
  <stockistCountry country="Great Britain">
    <stockist>
      <name></name>
      <address></address>
    </stockist>
  </stockistCountry>
  <stockistCountry country="Germany">
    <stockist>
      <name></name>
      <address></address>
    </stockist>
  </stockistCountry>
  ...
</stockists>

И мой код C# для синтаксического анализа выглядит так:

string path = String.Format("~/Content/{0}/Content/Stockists.xml", Helper.Helper.ResolveBrand());
XElement xml = XElement.Load(Server.MapPath(path));

var stockistCountries = from s in xml.Descendants("stockistCountry")
                                select s;

StockistCountryListViewModel stockistCountryListViewModel = new StockistCountryListViewModel
{
    BrandStockists = new List<StockistListViewModel>()
};

foreach (var stockistCountry in stockistCountries)
{
    StockistListViewModel stockistListViewModel = new StockistListViewModel()
    {
        Country = stockistCountry.FirstAttribute.Value,
        Stockists = new List<StockistDetailViewModel>()
    };

    var stockist = from s in xml.Descendants(stockistCountry.FirstAttribute.Value) // point of failure for 'Great Britain'
                   select s;

    foreach (var stockistDetail in stockist)
    {
         StockistDetailViewModel stockistDetailViewModel = new StockistDetailViewModel
         {
             StoreName = stockistDetail.FirstNode.ToString(),
             Address = stockistDetail.LastNode.ToString()
         };

         stockistListViewModel.Stockists.Add(stockistDetailViewModel); 
     }

     stockistCountryListViewModel.BrandStockists.Add(stockistListViewModel);
 }

 return View(stockistCountryListViewModel);

Мне интересно, правильно ли я подхожу к синтаксическому анализу Xml, не должно ли у меня быть пробелов в моих атрибутах и ​​т. д.? Как исправить, чтобы Великобритания разбирала


person ediblecode    schedule 19.04.2012    source источник
comment
Описание не работает пожалуйста. Это выглядит в основном нормально.   -  person Henk Holterman    schedule 19.04.2012
comment
@HenkHolterman Не удается прокомментировать строку, говоря, что пробел не разрешен.   -  person ediblecode    schedule 19.04.2012
comment
Теперь я понимаю, но что это должно было сделать? Он ищет элемент <Great Britain> </Great Britain>.   -  person Henk Holterman    schedule 19.04.2012
comment
@HenkHolterman Но это не удается, потому что в нем есть пробел.   -  person ediblecode    schedule 19.04.2012


Ответы (1)


Однако xml.Descendants(value) не работает, если значение имеет определенные символы

XElement.Descendants() ожидает XName для тега, а не для значения.

И теги XML действительно не могут содержать пробелы.

Однако ваш образец XML содержит только значение атрибута, и места там достаточно.

Обновлять:

Я думаю, тебе нужно

//var stockist = from s in xml.Descendants(stockistCountry.FirstAttribute.Value) 
//              select s;

var stockists = stockistCountry.Descendants("stockist");
person Henk Holterman    schedule 19.04.2012