XML到Linq C#,没有结果

时间:2014-08-06 18:43:44

标签: c# xml linq

我正在尝试从下面的XML代码中获取Filename,其中最终用户传入的partNum与JES的partNum匹配。 我当前的代码产生了0个结果。

我也会尝试抓住这个不同的属性。

<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>

C#代码

var FileName = (from n in xml.Descendants("JESs") where n.Element("JES").Attribute("partNum").Value == Convert.ToString(partNum) select n.Elements().Descendants().Elements()).ToList();

3 个答案:

答案 0 :(得分:1)

您可以像这样简化(并修复)您的查询:

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

答案 1 :(得分:-1)

不应该是:

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();

答案 2 :(得分:-2)

试试这个

    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的元素,则fileName将为null