C# 使用多个参数查询XML文件

C# 使用多个参数查询XML文件,c#,xml,parameters,C#,Xml,Parameters,首先是一点背景知识。我希望建立一个程序,为一家电子制造商消除对电子元件的认识,这是该程序的电阻部分。我选择了用XML编写,但在查询我希望的方式时遇到了问题 这是我的XML文件的一个示例 <?xml version="1.0" encoding="UTF-8"?> -<Resistors> -<Resistor> <ResistNo>RES144</ResistNo>

首先是一点背景知识。我希望建立一个程序,为一家电子制造商消除对电子元件的认识,这是该程序的电阻部分。我选择了用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>

从这里我迷路了,我需要从“ResistNo”和“Value”中获取值,并将它们发布到txtResistNo.Text和txtValue.Text中。我一直在互联网上绞尽脑汁寻找更接近的东西,上面的代码与我找到的代码一样接近。

您只需选择一个

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") 
                        });
此外,您还可以使用一个
而不是五个
来提高效率:

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

如果您想要单一结果,请使用
First
First或default

谢谢您,我非常喜欢效率。不过,我的耳朵后面有点湿。输入txtrestino.Text=elements是否正确。ResistNo@K_Specselect返回多个结果。如果在select之后使用First(),则可以得到一个结果,然后可以使用
txtrestino.Text=elements.ResistNo
非常感谢。现在我必须解决新的异常System.Xml.XmlException未经处理消息=根级别的数据无效。第1行,位置1我相当确定XML文件格式正确。哦,好吧。再次感谢你。
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") 
                        });