来自查询字符串的LINQ to XML查询

时间:2011-06-27 21:35:26

标签: c# linq-to-xml

我需要根据查询字符串值创建xml文件。

我的xml文件:

<Products>
<Product>
    <Name>Name</Name>
    <Category>Books</Category>
    <SubCategory>Drama</SubCategory>
</Product>
<Product>
    <Name>Name</Name>
    <Category>Books</Category>
    <SubCategory>Action</SubCategory>
</Product>
<Product>
    <Name>Name</Name>
    <Category>Paper</Category>
    <SubCategory></SubCategory>
</Product>

因此,如果我输入?filter=Books,Paper,我需要选择Product其中Category包含来自查询字符串的值。

然后,如果我输入?filter=Books,Paper&filter2=Drama,我仍然需要Product Category包含filter1,但Product元素包含SubCategory,其中包含filter2 1}}我需要选择那些。

所以使用:?filter=Books,Paper&filter2=Drama我需要得到如下所示的xml:

<Products>
    <Product>
        <Name>Name</Name>
        <Category>Books</Category>
        <SubCategory>Drama</SubCategory>
    </Product>
    <Product>
        <Name>Name</Name>
        <Category>Paper</Category>
        <SubCategory></SubCategory>
    </Product>
</Products>

某些产品可能还有空SubCategory元素。我不知道这是否重要。

我的查询如下:

var items = from el in SimpleStreamAxis(esysPath, "Product")
                        where filter.Contains(el.Element("Category").Value.Trim())
                        where filter1.Contains(el.Element("SubCategory").Value.Trim())
                        select new
                        {
                            ProductID = el.Element("ID").Value,
                            Name = el.Element("Name").Value,
                            Price = el.Element("Price").Value,
                            Picture = el.Element("Picture").Value
                        };

这是选择Product包含filter1的所有SubCategory元素。

所以任何人都可以指出我如何编写此查询的正确方向。

感谢。

1 个答案:

答案 0 :(得分:0)

这应该让您开始朝着正确的方向前进,它会找到Category元素为BookPaper

的所有产品
List<string> categories = new List<string() {"Book", "Paper"};
XDocument doc = XDocument.Parse("Your xml string");
var products = doc.Descendants("Product")
               .Where(el => categories.Contains(el.Element("Category").Value));