2010-03-24 2 views
0

Я получил XML-документ с большим количеством данных, разделенных на категории-> подкатегории. Например:Динамический выбор с помощью linq-to-xml?

<?xml version="1.0" encoding="utf-8" ?> 
<data> 
    <car> 
     <transmission> 
      <option value="1" text="Manual" /> 
      <option value="2" text="Automatic" /> 
     </transmission> 
     <milage> 
      <option value="2" text="0-499" /> 
      <option value="4" text="500-999" /> 
      <option value="6" text="1000-1499" /> 
      <option value="8" text="1500-1999" /> 
      <option value="10" text="2000-2499" /> 
     </milage> 
     <fuel> 
      <option value="1" text="Gasolin" /> 
      <option value="2" text="Diesel" /> 
      <option value="3" text="E95" /> 
      <option value="4" text="Hybrid" /> 
      <option value="5" text="Electric" />    
     </fuel> 
    </car> 
</data> 

Я использую Ajax для получения данных, которые мне нужны из документа xml. Как это:

public string GetData(int typeOfData) 
    { 
     List<string> queryString = new List<string>(); 
     switch (typeOfData) 
     { 
      case 1: 
       // Car->Milage 
       queryString.Add("car"); 
       queryString.Add("milage"); 
       break; 
      case 2: 
       // Car-Fuel 
       queryString.Add("car"); 
       queryString.Add("fuel"); 
       break; 
     } 

     // Now i need to construct a query to return the data, i have tried something like this: 
     var results = from data in db.Elements("data") where (queryString => db.Elements(test)) select new { ID = data.Attribute("value").Value, Name = data.Attribute("text").Value }; 
    } 
} 

С помощью XPath я мог бы просто просто сделать строку запроса с, но как я могу это сделать в LINQ?

+0

Боюсь, для меня не очевидно, что вы пытаетесь сделать. Не могли бы вы объяснить, что должно быть возвращено в каждом случае? –

ответ

1

Вы можете использовать XPath в Linq.

public string GetData(int typeOfData) 
{ 
    string query = null; 
    switch (typeOfData) { 
    case 1: 
     query = "/data/car/milafe/option"; 
     break; 
    case 2: 
     query = "/data/car/fuel/option"; 
     break; 
    } 

    var results = from e in db.XPathSelectElements(query) 
     select new { ID = e.Attribute("value").Value, Name = e.Attribute("text").Value }; 
} 
0

Вам нужно пройти по дереву XML и получить элемент, содержащий параметры в switch заявлении, как это:

public string GetData(int typeOfData) 
{ 
    XElement container; 
    switch (typeOfData) 
    { 
     case 1: 
      // Car->Milage 
      container = db.Root.Element("car").Element("mileage"); 
      break; 
     case 2: 
      // Car-Fuel 
      container = db.Root.Element("car").Element("fuel"); 
      break; 
     default: 
      throw new ArugmentOutOfRangeException("typeOfData"); 
    } 

    var results = container.Elements("option") 
     .Select(data => new { ID = data.Attribute("value").Value, Name = data.Attribute("text").Value }; 
} 
Смежные вопросы