XElementを使ってxmlファイルを読み込む

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

xmlファイルを読み込みたい。
具体的には、VisualStudioのC#(.net6)のプロジェクトファイル(.csproj)を読み込んで、中身の情報を見たい。

csprojのサンプルはこんな感じ。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <AssemblyVersion>1.0.1234.5</AssemblyVersion>
    <Version>1.2.5000.0</Version>
    <Authors>MySakuseiSha</Authors>
    <Company>MyCompany</Company>
    <Product>MySeihinMei</Product>
    <Description>MySetsumei</Description>
    <Copyright>MyCopyRight</Copyright>
  </PropertyGroup>

</Project>

やりかた

System.Xml.Linq名前空間XElement を使う。

XElement xml = XElement.Load(x);

// 全部取る
var infos = xml.Elements();

//---------------------------------

// 全部取る
foreach (var info in infos)
{
    Debug.WriteLine(" " + info.Name + ", " + info.Value);

    foreach (var element in info.Elements())
    {
        Debug.WriteLine("  " + element.Name + ", " + element.Value);
    }
}

このコードで、上に挙げたcsprojnサンプルを読んだときの結果の一部

 PropertyGroup, Exenet6.0enableenable1.0.1234.51.2.5000.0MySakuseiShaMyCompanyMySeihinMeiMySetsumeiMyCopyRight
  OutputType, Exe
  TargetFramework, net6.0
  ImplicitUsings, enable
  Nullable, enable
  AssemblyVersion, 1.0.1234.5
  Version, 1.2.5000.0
  Authors, MySakuseiSha
  Company, MyCompany
  Product, MySeihinMei
  Description, MySetsumei
  Copyright, MyCopyRight

値が取れてる。

参考

MS公式 XElement クラス

https://learn.microsoft.com/ja-jp/dotnet/api/system.xml.linq.xelement?view=net-7.0

【保存版】C#xmlを読み書きする最もシンプルな方法はこれ!

https://www.sejuku.net/blog/86867