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

发布于 2024-08-26 01:15:31 字数 1874 浏览 5 评论 0原文

我得到了一个 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 中做到这一点?

I got a XML document with a lot of data divided into category->subcategory. Like this:

<?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>

I am using Ajax to retrieve the data that i need from the xml document.
Like this:

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 };
    }
}

With XPath i could just simple make a string to query with, but how do i do this in linq?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痕至 2024-09-02 01:15:31

您可以在 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 };
}

You can use XPath in 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 };
}
初见你 2024-09-02 01:15:31

您需要遍历 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 };
}

You need to traverse the XML tree and get the element containing the options in the switch statement, like this:

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 };
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文