LINQ to XML行有两个属性

时间:2015-03-26 15:32:29

标签: c# xml linq linq-to-xml

我有问题。我试图得到包含cols的行。要过滤它们,我想检查两个属性和值,然后,它们应该返回第三列。

例如: XML代码示例:

<?xml version="1.0" encoding="UTF-8"?>
<teryt>
<catalog name="TERC" type="all" date="2015-01-01">
<row>
<col name="WOJ">02</col>
<col name="POW"/>
<col name="GMI"/>
<col name="RODZ"/>
<col name="NAZWA">DOLNOŚLĄSKIE</col>
<col name="NAZDOD">województwo</col>
<col name="STAN_NA">2015-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI"/>
<col name="RODZ"/>
<col name="NAZWA">bolesławiecki</col>
<col name="NAZDOD">powiat</col>
<col name="STAN_NA">2015-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI">01</col>
<col name="RODZ">1</col>
<col name="NAZWA">Bolesławiec</col>
<col name="NAZDOD">gmina miejska</col>
<col name="STAN_NA">2015-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI">02</col>
<col name="RODZ">2</col>
<col name="NAZWA">Bolesławiec</col>
<col name="NAZDOD">gmina wiejska</col>
<col name="STAN_NA">2015-01-01</col>
</row>
<row>
<col name="WOJ">02</col>
<col name="POW">01</col>
<col name="GMI">03</col>
<col name="RODZ">2</col>
<col name="NAZWA">Gromadka</col>
<col name="NAZDOD">gmina wiejska</col>
<col name="STAN_NA">2015-01-01</col>
</row>

现在我尝试使用此代码执行此操作:

public static IEnumerable<XElement> ZwrocNumerWojewodztwa(IEnumerable<XElement> rows, String value1, String value2)
{
    return rows
        .Where(row => row.Elements("col")
        .Any(col =>
         col.Attributes("name").Any(attr => attr.Value.Equals("WOJ"))
                && col.Value.Equals(value1) && (col.Attributes("name").Any(attr => attr.Value.Equals("POW"))
                && col.Value.Equals(value2))));
}

当我删除第二个col.Attributes(“name”)。任何(...)时,代码都很棒。我做错了什么?

然后我必须从代​​码cols“NAZWA”中取出任何提示?

由于

2 个答案:

答案 0 :(得分:1)

我认为这就是你想要的:

return rows
    .Where(row =>
        row.Elements("col").Any(col =>
            col.Attributes("name").Any(attr => attr.Value.Equals("WOJ")) &&
            col.Value.Equals(value1)) &&

        row.Elements("col").Any(col =>
            col.Attributes("name").Any(attr => attr.Value.Equals("POW")) &&
            col.Value.Equals(value2)));

链接到工作代码:https://dotnetfiddle.net/9aJOCV

答案 1 :(得分:0)

这个问题是你正在寻找具有单个列属性设置为&#34; POW&#34;的行。 AND &#34; WOJ&#34;。将其切换为 OR