我得到了一个包含大量数据的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中如何做到这一点?
发布于 2010-03-24 22:48:04
你可以在Linq.中使用XPath。
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 };
}发布于 2010-03-24 22:43:11
您需要遍历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 };
}https://stackoverflow.com/questions/2508527
复制相似问题