XML到Linq C#,没有结果
我试图从下面的XML代码中获取文件名,最终用户传入的partNum与JES的partNum匹配。 我当前的代码生成0个结果 我还将尝试获取disrete属性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
<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