-->

读取属性值与的XmlReader(Reading attribute values with Xml

2019-06-25 15:04发布

我有我尝试读取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

这是我想的TextReader读取节点内的下列数值喜欢confidentiality="F"currency="USD" ,等等,但它正好跳到下一个章节不读这些值!

<slnc:actualAvailableToBorrow xmlns:slnc="http://www.newyorkfed.org/xml/schemas/SecLending" 
      confidentiality="F" currency="USD" decimals="0" method="AA" 
      multiplier="5" securityLendingType="AA" status="A" value="1474"/>

我如何获得的TextReader读取属性值? 这将是理想的它打印值“货币”,然后将其值:“F”,等等。

Answer 1:

得到一个,命名属性

使用XmlTextReader.GetAttribute(MSDN)

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

此功能的一个很好的功能:如果没有定义的属性不会导致异常-它仅仅返回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(); 


Answer 2:

你可以改变循环条件了一点,所以它也可以通过属性迭代:

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方法前进读者在当前元素的下一个属性,或者如果它不能这样做,返回false。



文章来源: Reading attribute values with XmlReader
标签: c# xml xmlreader