inohilog

/var/log/inohiro.log

LINQで列挙するときの通し番号(?)みたいなものはどうやって取ればいいかな

LINQXML文書を書くとき、要素の属性として「Id = 通し番号」みたいのをくっつけたいんだけど、この通し番号はどうやって取ればいいかわからない。

XDocument doc = XDocument.Load( INPUT_PATH );
XNamespace ksj = "http://nlftp.mlit.go.jp/ksj/schemas/ksj-app";
var plants = new XElement( "Plants",
	from el in doc.Root.Descendants( ksj + "FC06" )
	select new XElement( "Plant",
		new XAttribute( "Id", 1 ), // ここ!
		new XElement( "Name", el.Element( ksj + "NPL" ).Value ),
		new XElement( "Belong", el.Element( ksj + "NOO" ).Value ),
		new XElement( "PlantNum", el.Element( ksj + "PLN" ).Value ),
		new XElement( "Address", el.Element( ksj + "AS3" ).Value ),
		new XElement( "Power", el.Element( ksj + "PRP" ).Value )
	)
);

plants.Save( @"plants.xml" );

これをこのまま実行すると、

<?xml version="1.0" encoding="utf-8"?>
<Plants>
  <Plant Id="1">
    <Name>川内原子力</Name>
    <Belong>九州電力</Belong>
    <PlantNum>2</PlantNum>
    <Address>鹿児島県川内市</Address>
    <Power>89000</Power>
  </Plant>
  <Plant Id="1">
    <Name>川内原子力</Name>
    <Belong>九州電力</Belong>
    <!-- 省略 -->

こんな感じで「Id = 1」になっちゃいますよね(new XAttribute( "Id", 1 )って書いてるから仕方ないんだけど)。ここを連番で取りたい。

追記1

id:karuakunさんにコメントいただいた方法。単純にint型の変数をカウンタとして用いるだけ。ふつうにできた(!。

public void Generate()
{
	int index = 0;

	XDocument doc = XDocument.Load( INPUT_PATH );
	XNamespace ksj = "http://nlftp.mlit.go.jp/ksj/schemas/ksj-app";
	var plants = new XElement( "Plants",
		from el in doc.Root.Descendants( ksj + "FC06" )
		select new XElement( "Plant",
			new XAttribute( "Id", index++ ),
			new XElement( "Name", el.Element( ksj + "NPL" ).Value ),
			new XElement( "Belong", el.Element( ksj + "NOO" ).Value ),
			new XElement( "Address", el.Element( ksj + "AS3" ).Value ),
			new XElement( "PlantNum", el.Element( ksj + "PLN" ).Value ),
			new XElement( "Power", el.Element( ksj + "PRP" ).Value )
		)
	);

	plants.Save( @"plants2.xml" );
}
<?xml version="1.0" encoding="utf-8"?>
<Plants>
  <Plant Id="0">
    <Name>川内原子力</Name>
    <Belong>九州電力</Belong>
    <Address>鹿児島県川内市</Address>
    <PlantNum>2</PlantNum>
    <Power>89000</Power>
  </Plant>
  <Plant Id="1">
    <Name>川内原子力</Name>
    <Belong>九州電力</Belong>
    <!-- 省略 -->