这是我的目标是遍历所有节点的代码,而不仅仅是一个节点,所以在我的情况下,它一次获得第一个设备节点和他的所有子节点,所以我怎样才能获得每一个设备和 PortA PortB 节点。然后我将能够设置我的班级价值观。
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>