XML到Linq C#,没有结果

XML到Linq C#,没有结果,c#,xml,linq,C#,Xml,Linq,我试图从下面的XML代码中获取文件名,最终用户传入的partNum与JES的partNum匹配。 我当前的代码生成0个结果 我还将尝试获取disrete属性 <JESs> <JES partNum="116102440002" discrete="true"> <Filename>116-10244-0002_ILLK Collimator Cover Assy_Rev 3.docx</Filename> </J

我试图从下面的XML代码中获取文件名,最终用户传入的partNum与JES的partNum匹配。 我当前的代码生成0个结果

我还将尝试获取disrete属性

<JESs>
    <JES partNum="116102440002" discrete="true">
       <Filename>116-10244-0002_ILLK Collimator Cover Assy_Rev 3.docx</Filename>
    </JES>
    <JES partNum="116102440003" discrete="false">
        <Filename>ILLK Collimator in Gimbal_Rev 4.docx</Filename>
    </JES>
    <JES partNum="116102440004" discrete="true">
        <Filename>116-10244-0004_Collimator Cover Installation_Rev 1.docx</Filename>
     </JES>
     <JES partNum="116102440005" discrete="true">
        <Filename>116-10244-0005_Collimator Lens Assembly_Rev 2.docx</Filename>
     </JES>
 </JESs>
难道不是:

var FileNames = (from n in xml.Descendants("JESs")
                 where n.Element("JES").Attribute("partNum").Value == Convert.ToString(partNum)
                 select n.Element("JES").Element("Filename")).ToList();
您可以这样简化(并修复)查询:

var partNumber = Convert.ToString(partNum);
var result = xml.Descendants("JES")
             .FirstOrDefault(x => (string)x.Attribute("partNum") == partNumber);

if(result != null)
{
    var fileName = (string)result.Element("Filename");
}
试试这个

    var fileName = (from x in xml.Elements()
                      where x.Attribute("partNum").Value == "xxxx"

                      select x.Element("Filename").Value).FirstOrDefault();

//replace xxxx with actual value

如果找不到给定partNum的元素,文件名将为
null

很抱歉,但是您在编写此文件时是怎么想的呢
n.elements().substands().elements()
?elements()是JES,JES的后代是fileName,抓取所有文件名。@Spitfire19但您不能在元素列表上调用
.substands
,或子体列表中的
.Elements
。是的,在查看此处时感到困惑:尝试此操作以获取NullReferenceException。@Selman22:更新的答案。我们需要检查fileNameno是否为null它将引发异常,因为您正在迭代所有元素,并且所有元素都没有partNumattribute@Selman22:根据OP在问题中指定的xml格式,所有元素中都有partNum。在使用FirstOrDefault()和where()时,再次调用的这种编码风格是什么而不是类似SQL的语句?我以前在LINQtoSQL项目中使用过它。它是扩展方法语法。您所有类似sql语法的查询都被翻译成了这个。最后,您得到了这个的一个变体,谢谢!谢谢,这个很好用。我还将介绍Selman22,因为一旦我熟悉了如何访问数据Sql样式,我就喜欢使用这种样式。这个样式有一个问题,它只成功地从第一个JE获取文件名。
    var fileName = (from x in xml.Elements()
                      where x.Attribute("partNum").Value == "xxxx"

                      select x.Element("Filename").Value).FirstOrDefault();

//replace xxxx with actual value