使用多个参数查询XML文件

时间:2014-07-16 09:26:21

标签: c# xml parameters

首先介绍一下背景。我希望建立一个程序来降低电子制造商对电子元件的识别技能,这是该程序的电阻部分。我选择写入XML,但我遇到的问题是按照我希望的方式查询。

这是我的XML文件的示例

<?xml version="1.0" encoding="UTF-8"?>
    -<Resistors>
        -<Resistor>
            <ResistNo>RES144</ResistNo>
            <Value>2K 0.6w</Value>
            <Band1>Red</Band1>
            <Band2>Black</Band2>
            <Band3>Black</Band3>
            <Band4>Brown</Band4>
            <Band5>Brown</Band5>
         </Resistor>
     </Resistors>

为了在入门级可用,我需要能够通过Band颜色查询和过滤电阻,每个电阻都有一个独特的颜色代码,因此如果不存在,获得两个结果的风险很小。

到目前为止,我有这段代码。

        var xmlResist = XDocument.Parse("resistor.xml");

        var elements = xmlResist.Element("Resistors")
                .Descendants("Resistor")
                .Where(x => x.Element("Band1").Value == txtBand1.Text)
                .Where(x => x.Element("Band2").Value == txtBand2.Text)
                .Where(x => x.Element("Band3").Value == txtBand3.Text)
                .Where(x => x.Element("Band4").Value == txtBand4.Text)
                .Where(x => x.Element("Band5").Value == txtBand5.Text);

从这里我迷路了,我需要从“ResistNo”和“Value”中获取值并将它们发布到txtResistNo.Text和txtValue.Text中。我一直在摸着我的头在网上搜索甚至接近的东西,上面的代码就像我发现的那样近。

1 个答案:

答案 0 :(得分:0)

您需要的只是Select

var elements = xmlResist.Element("Resistors")
            .Descendants("Resistor")
            .Where(x => x.Element("Band1").Value == txtBand1.Text)
            .Where(x => x.Element("Band2").Value == txtBand2.Text)
            .Where(x => x.Element("Band3").Value == txtBand3.Text)
            .Where(x => x.Element("Band4").Value == txtBand4.Text)
            .Where(x => x.Element("Band5").Value == txtBand5.Text)
            .Select(x => new 
                        { 
                           ResistNo = (string)x.Element("ResistNo"), 
                           Value = (string)x.Element("Value") 
                        });

另外,如果使用一个Where而不是五个来提高效率,则可以提高效率:

var elements = xmlResist.Element("Resistors")
            .Descendants("Resistor")
            .Where(x => x.Element("Band1").Value == txtBand1.Text &&
                        x.Element("Band2").Value == txtBand2.Text &&
                        x.Element("Band3").Value == txtBand3.Text &&
                        x.Element("Band4").Value == txtBand4.Text &&
                        x.Element("Band5").Value == txtBand5.Text)
            .Select(x => new 
                        { 
                           ResistNo = (string)x.Element("ResistNo"), 
                           Value = (string)x.Element("Value") 
                        });

如果您想要一个结果,请使用FirstFirstOrDefault