我试图从XNode获取属性我使用以下代码
XDocument document = XDocument.Load(FilePath);
var Elements = from p in document.Descendants(modality) select p.Elements("Key_Part");
//var Attriputess = from p in document.Descendants(modality) select p.Attributes();
foreach (var Element in Elements)
{
foreach (var node in Element.Nodes())
{
XmlReader reader = node.CreateReader();
string a = reader.GetAttribute("Type");
}
}
总是等于null 像这样的XML类型
<ShortcutList Version="8">
<Doctor>
<Key_Part >
<Key1 Name = "XX" Type= "XXXXXXXXX" > rrrr</Key1>
<Key2 Name = "XasfsaX" Type= "XXXXsafasfXXXXX" > rrsfsfrr</Key1>
</Key_Part>
我想获得Key1,Key2属性和值
答案 0 :(得分:1)
我必须说我已经修复了你在下面的工作查询之前提供的XML。因此,您尚未关闭最后两个代码,并且已通过Key2
标记</Key1>
标记了什么是错误的XML。
尝试以下操作,这将返回条目列表(每个键一个),其中每个具有属性的匿名类型条目:名称,值,类型
var keys = xdoc.Descendants("ShortcutList")
.Descendants("Doctor")
.Descendants("Key_Part")
.DescendantNodes()
.OfType<XElement>()
.Where(d => d.Name.LocalName.Contains("Key"))
.Select(e => new {
Value = e.Value,
Name = e.Attribute("Name").Value,
Type = e.Attribute("Type").Value
})
.ToList();
编辑:修正了XML
<ShortcutList Version="8">
<Doctor>
<Key_Part >
<Key1 Name = "XX" Type= "XXXXXXXXX" > rrrr</Key1>
<Key2 Name = "XasfsaX" Type= "XXXXsafasfXXXXX" > rrsfsfrr</Key2>
</Key_Part>
</Doctor>
</ShortcutList>
答案 1 :(得分:0)
在开始获取属性之前,您需要确保阅读器位于元素上。但是,除非您有充分的理由这样做,否则您根本不需要XmlReader
来获取属性值。
编辑添加请求的示例:
foreach (var a in document.Descendants(modality).Elements("Key_Part").Select(e => e.Attribute("Type").Value)) {
// the variable a is a string with the attribute value
}
或者像这样:
foreach (var attr in document.Descendants(modality).Elements("Key_Part").Attributes("Type")) {
string a = attr.Value;
}