使用XmlReader读取属性值

我有一个XML文件,我想从这里读取,并具有以下代码:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.IO; namespace XML { class Program { static void Main(string[] args) { XmlTextReader textReader = new XmlTextReader("secLendingXML.cfm.xml"); while (textReader.Read()) { switch (textReader.NodeType) { case XmlNodeType.Element: Console.WriteLine(textReader.Name); Console.WriteLine(textReader.Value); break; case XmlNodeType.Text: Console.WriteLine(textReader.Value); break; case XmlNodeType.XmlDeclaration: case XmlNodeType.ProcessingInstruction: Console.WriteLine(textReader.Name + " " + textReader.Value); break; case XmlNodeType.Comment: Console.WriteLine(textReader.Value); break; case XmlNodeType.EndElement: break; } } Console.ReadLine(); } } } 

代码在正在读取节点并返回名称的意义上正常工作。 但是,问题是我正在尝试检索节点内的数据。 换句话说,当它在测试部分之后读取第一部分时,它将显示为:

 slnc:DataSet slnc:Group slnc:Section slnc:ActualAvailableToBorrow *** here *** slnc:oustandingLoans 

这是我希望文本阅读器读取节点内的以下值,如confidentiality="F"currency="USD"等,但它只是跳到下一部分而不读取这些值!

  

如何让文本阅读器读取属性值? 打印值“currency”,然后打印它的值:“F”,依此类推。

获取单个命名属性

使用XmlTextReader.GetAttribute(MSDN)

 case XmlNodeType.Element: Console.WriteLine(textReader.Name); Console.WriteLine(textReader.Value); Console.WriteLine(textReader.GetAttribute("currency")); 

这个函数的一个很好的特性:如果没有定义属性,它不会导致exception – 它只会返回Null

获取所有属性

使用XmlTextReader.MoveToAttribute(MSDN)

将AttributeCount属性与MoveToAttribute结合使用:

 case XmlNodeType.Element: Console.WriteLine(textReader.Name); Console.WriteLine(textReader.Value); for (int attInd = 0; attInd < textReader.AttributeCount; attInd++){ textReader.MoveToAttribute( attInd ); Console.WriteLine(textReader.Name); Console.WriteLine(textReader.Value); } textReader.MoveToElement(); 

您可以稍微更改循环条件,以便它也遍历属性:

 while (textReader.MoveToNextAttribute() || textReader.Read()) { case XmlNodeType.Element: Console.WriteLine(textReader.Name); Console.WriteLine(textReader.Value); break; //... case XmlNodeType.Attribute: //use textReader.Name and textReader.Value here for attribute name and value break; } 

MoveToNextAttribute方法将reader提升到当前元素中的下一个属性,如果不能,则返回false。