XML ファイルの属性を使用して同じことを行うことに問題はありませんでした。私は次の方法でそうすることができました:
XML ドキュメントを宣言します
static XDocument cfgXml;
ボタンをクリックし、XML ファイルを参照して選択します。
private void selcFile_Click(object sender, EventArgs e)
{
DialogResult result1 = openFileDialog1.ShowDialog();
string xmlFile = openFileDialog1.FileName;
if (result1 == DialogResult.OK)
{
cfgXml = XDocument.Load(@xmlFile);
}
}
リストを作成するクラスがあります
class DiskPoolDisks
{
public string id { get; set; }
public DiskPoolDisks(string a)
{
this.id = a;
}
}
ボタンをクリックしてリストを読み込み、作成します
private void loadCfg_Click(object sender, EventArgs e)
{
List<DiskPoolDisks> pooldiskArray = new List<DiskPoolDisks>(from d in cfgXml.XPathSelectElements("//Configuration//ServerGroup//Servers//Server//DiskPools// PhysicalDisks//PhysicalDisks") select new DiskPoolDisks((string)d.Attribute("id")));
}
次に、値からリストを作成する必要がある要素を含む別の XML ファイルを同じ形式で作成する必要があります。
ただし、上記と同じ方法を使用しようとしても機能しません。カウントがゼロのリストが表示されます。リストには少なくとも 1 つの値が必要です。
static XDocument objXml;
private void selcObjFile_Click(object sender, EventArgs e)
{
DialogResult result2 = openFileDialog2.ShowDialog();
string xmlFile = openFileDialog2.FileName;
if (result2 == DialogResult.OK)
{
objXml = XDocument.Load(@xmlFile);
}
}
private void loadCfg_Click(object sender, EventArgs e)
{
List<CdpHistory> cdphistoryArray = new List<CdpHistory>(from d in objXml.XPathSelectElements("//DataRepository//StreamLogicalDiskData//MinQuota")
select new CdpHistory((string)d.Attribute("Value")));
}
次の XML ファイルの MinQuota 要素から値を取得しようとしている XML ファイル
<Repository>
<StreamData>
<SequenceNumber>63066</SequenceNumber>
<Id>188804e8-c579-438c-8a17-1d1f2ce89d17</Id>
<Caption>Caption goes here</Caption>
<ExtendedCaption>Log history </ExtendedCaption>
<Internal>false</Internal>
<Server>949303A9-8472-4979-9EA0-A807831574AE</Server>
<DataStatus>Undefined</DataStatus>
<PresenceStatus>Present</PresenceStatus>
<Size>
<Value>1125899906842624</Value>
</Size>
<MappingName>mapping one</MappingName>
<Status>Online</Status>
<Virtualized>false</Virtualized>
<AccessRights>NotDefined</AccessRights>
<Failure>Undefined</Failure>
<Role>Unknown</Role>
<IsMapped>false</IsMapped>
<Protected>true</Protected>
<Id>949303A9</Id>
<Index>10</Index>
<MinQuota>
<Value>11811160064</Value>
</MinQuota>
<MaxQuota>
<Value>0</Value>
</MaxQuota>
<Affinity>
<int>1</int>
<int>2</int>
<int>3</int>
</Affinity>
<State>Idle</State>
<Time>0</Time>
<Size>
<Value>0</Value>
</Size>
<State>NotPresent</State>
</StreamData>
</Repository>