|
■No83101 (むこ さん) に返信
> </record Name>
閉じタグに空白が含まれているので、これは XML とは呼べません。
整形式の XML 文書になるよう、データを見直すか、もしくは
その「XML モドキ」を自力で読み取るかの二択ですね。
> 2つのプロパティを作りたいと思っています。
「プロパティを作る」という要件が、どのような結果を想定しているのか
わからなかったのですが、LINQ to XML が使えないでしょうか。
using System;
using System.Linq;
using System.Xml.Linq;
string srcXml =
@"<?xml version='1.0' encoding='shift_jis'?>
<Node Name='A'>
<record Name='Aさん'>
<name>佐藤</name>
<number>1</number>
</record>
<record Name='Bさん'>
<name>鈴木</name>
<number>2</number>
</record>
<record Name='Zさん'>
<name>山田</name>
<number>26</number>
</record>
</Node>";
// var root = XDocument.Load("C:\folder\file.xml");
var root = XDocument.Parse(srcXml).Root;
// name/number プロパティを持つオブジェクトの
// 連想配列「q」を作成する
var q = root.Elements("record").Select(r => new
{
Name = r.Attribute("Name").Value,
name = r.Element("name").Value,
number = int.Parse(r.Element("number").Value),
}).ToDictionary(o => o.Name, o => new { o.name, o.number });
// 「q」の内容を読み取る
Console.WriteLine("record の数 => {0}" , q.Count);
Console.WriteLine("record.Name を列挙:");
foreach (var key in q.Keys)
{
Console.Write(" '{0}'", key);
}
Console.WriteLine();
string name = "Bさん";
Console.WriteLine("Name 属性値が'{0}'なrecordの内容", name);
if (q.ContainsKey(name))
{
var record = q[name];
Console.WriteLine("{0}: name={1}, number={2}", name, record.name, record.number);
}
else
{
Console.WriteLine("'{0}'というNameを持つ record はありません。", name);
}
|