首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用linq-to-xml进行动态选择?

使用linq-to-xml进行动态选择?
EN

Stack Overflow用户
提问于 2010-03-24 22:38:04
回答 2查看 1.1K关注 0票数 0

我得到了一个包含大量数据的XML文档,这些数据分为类别->子类别。如下所示:

代码语言:javascript
复制
<?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文档中检索所需的数据。如下所示:

代码语言:javascript
复制
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中如何做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-24 22:48:04

你可以在Linq.中使用XPath。

代码语言:javascript
复制
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 };
}
票数 1
EN

Stack Overflow用户

发布于 2010-03-24 22:43:11

您需要遍历XML树并获取包含switch语句中选项的元素,如下所示:

代码语言:javascript
复制
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 };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2508527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档