【C#】XMLを読み込む XElementの使い方

XElementを使ったXMLの読み込み方法を記載します。

【検証環境】VisualStudio2019 / .NET Core3.1

XMLを読み込む

ファイルパスは「D:PG-LIFEPerson.xml」とします。

要素の値を取得する

下記のXMLファイルのように、値が要素内の場合は、Elementメソッドを使用します。

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Person>
    <Name>永野芽衣</Name>
    <Age>21</Age>
    <BloodType>AB</BloodType>
  </Person>
  <Person>
    <Name>本田翼</Name>
    <Age>28</Age>
    <BloodType>O</BloodType>
  </Person>
  <Person>
    <Name>戸田恵梨香</Name>
    <Age>32</Age>
    <BloodType>AB</BloodType>
  </Person>
</Root>

上記のXMLから、名前・年齢・血液型を取得して画面に表示する場合は、下記のように書きます。

構文

Element(“要素名”).Value

//xmlファイルを読み込む
XElement xml = XElement.Load(@"D:PG-LIFEPerson.xml");
//Personタグ内の要素を取得する
IEnumerable<XElement> people = xml.Elements("Person");

foreach (var person in people)
{
    var name      = person.Element("Name").Value;
    var age       = person.Element("Age").Value;
    var bloodType = person.Element("BloodType").Value;
    
    Console.WriteLine($"{name} {age}歳 {bloodType}型");

    //永野芽衣 21歳 AB型
    //本田翼 28歳 O型
    //戸田恵梨香 32歳 AB型
}

属性の値を取得する

下記のように属性内に値が格納されている場合は、Attributeメソッドを使用します。

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Person>
    <Name value="永野芽衣" />
    <Age value="21" />
    <BloodType value="AB" />
  </Person>
  <Person>
    <Name value="本田翼" />
    <Age value="28" />
    <BloodType value="O" />
  </Person>
  <Person>
    <Name value="戸田恵梨香"/>
    <Age value="32"/>
    <BloodType value="AB"/>
  </Person>
</Root>
構文

Element(“要素名”).Attribute(“属性名”).Value

//xmlファイルを読み込む
XElement xml = XElement.Load(@"D:PG-LIFEPerson.xml");
//Personタグ内の要素を取得する
IEnumerable<XElement> people = xml.Elements("Person");

foreach (var person in people)
{
    //ここでpersonは単一のPersonタグとなる
    //Personタグ内の要素から、値を取得・表示する
    var name      = person.Element("Name").Attribute("value").Value;
    var age       = person.Element("Age").Attribute("value").Value;
    var bloodType = person.Element("BloodType").Attribute("value").Value;
    Console.WriteLine($"{name} {age}歳 {bloodType}型");
}

Leave a Reply

Your email address will not be published. Required fields are marked *