22

ここから読み込もうとしている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"これらの値を読み取らずに次のセクションにスキップします。

<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に属性値を読み取らせるにはどうすればよいですか?値「currency」を出力してから、その値「F」などを出力するのが理想的です。

4

2 に答える 2

55

単一の名前付き属性を取得する

XmlTextReader.GetAttributeを使用する(MSDN)

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

この関数の優れた機能の 1 つは、属性が定義されていない場合でも例外を発生させず、単純に を返すことNullです。

すべての属性を取得

XmlTextReader.MoveToAttributeを使用する(MSDN)

MoveToAttribute と組み合わせて AttributeCount プロパティを使用します。

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(); 
于 2012-06-19T17:04:48.797 に答える