如何获取不同节点中特定属性的值?

时间:2018-02-19 15:15:54

标签: c# linq-to-xml

我有一个看起来像

的xml文件
<?xml version="1.0"?>
 <notes>
  <note>
   <to>Tove</to>
   <from add="abc1">Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this weekend!</body>
  </note>
  <note>
   <to add="xyz1">Tove</to>
   <from>Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this <rref add="10">10</rref> weekend!</body>
   <pol add="adt10"/>
  </note>
 </notes>

我希望从具有该属性的所有不同节点获取属性add的所有值(自闭节点除外),即输出应该是值的列表/数组abc1,xyz1,10 。 如何使用LINQ-TO-XML执行此操作?

属性的Descendants方法是否等效?

1 个答案:

答案 0 :(得分:1)

您需要从具有属性add的后代进行过滤,而不是包含add属性的自闭节点。

类似的东西:

var nodess = from note in Doc.Descendants()
             where note.Attribute("add") !=null && !note.IsEmpty 
             select note.Attribute("add").Value;

foreach(var node in nodess)
{       
   Console.WriteLine(node);
}

您需要包含以下两者中的usings

using System.Xml.Linq;
using System.Linq;

输出:

  

ABC1

     

XYZ1

     

10

请参阅working DEMO Fiddle

UPDATE:

根据您的查询,在关闭标记分开但空白但没有值的情况下将其排除:

where note.Attribute("add") !=null && (!note.IsEmpty  || !String.IsNullOrEmpty(note.Value))