私の目標は、1つだけでなくすべてのノードを反復処理することです。私の場合、最初のデバイスノードとそのすべての子ノードを一度に取得するため、すべてのデバイスとポートAポートBノードを取得するにはどうすればよいですか. その後、クラスの値を設定できるようになります。
private void loadXmlFile(string path)
{
try
{
XElement deviceElement = XElement.Load(path);
Device device = new Device();
var allElements = deviceElement.DescendantNodes();
foreach (var elm in deviceElement.Elements())
{
if (elm.Name == "Device")
{
foreach (XAttribute att in elm.Attributes())
{
if (att.Name == "Type")
{
device.TBType1 = att.Value.ToString();
}
if (att.Name == "Name")
{
device.Name = att.Value.ToString();
}
if (att.Name == "ParentConnectedToPort")
{
device.ParentConnectedTo = att.Value.ToString();
}
if (att.Name == "DeviceConnectedToPort")
{
device.DeviceConnectedTo = att.Value.ToString();
}
string connectedTo = (string)elm.Parent.Attribute("Connected_BY");
if (att.Name == "properties" && connectedTo == "Directly")
{
string str = att.Value;
string[] parts = str.Split(':', ',');
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
これは、すべてのデバイス要素と独自の値を取得し、クラスの値に設定する必要があるように見える私の XML ファイルです。
<CMS>
<Device Name="CM_HOST" Type="TR">
<PortA Connected_BY="Directly">
<Device TB="AR" ParentConnectedToPort="A" Name="Akitio" DeviceConnectedToPort="A" properties="{'Type': 'AR' ,'Name': 'Akitio','Cable': '20G Passive'}">
<PortB Connected_BY="Directly">
<Device TB="AR" ParentConnectedToPort="A" Name="doc1" DeviceConnectedToPort="B" properties="{'Type': 'AR' ,'Name': 'doc1','Cable': '20G Passive'}">
<PortB Connected_BY="Directly">
<Device TB="AR" ParentConnectedToPort="A" Name="doc2" DeviceConnectedToPort="B" properties="{'Type': 'AR' ,'Name': 'doc2','Cable': '20G Passive'}" />
</PortB>
<PortA Connected_BY="None" />
<PortE Connected_BY="None" />
</Device>
</PortB>
<PortA Connected_BY="None" />
<PortE Connected_BY="None" />
</Device>
</PortA>
<PortB Connected_BY="None" />
<PortE Connected_BY="None" />
</Device>
<Sx properties="{'FTDI_port': '0' ,'SX_power_button_pin': '7','SX_SLP_S3_pin': '6','SX_SLP_S4_pin': '11','SX_SLP_S5_pin': '10','SX_TBT_wake_N_pin': '8','SX_PCIE_wake_pin': '9','G3_Power_Mode': 'PowerSplitter'}" />
</CMS>