如何在 C# 中从 XML 中读取数据?
How can I read data from this XML in c#?
<?xml version="1.0"?>
<!--
** DO NOT EDIT THIS FILE.
** If you make changes to this file while any VirtualBox related application
** is running, your changes will be overwritten later, without taking effect.
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
-->
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.12-windows">
<Global>
<ExtraData>
<ExtraDataItem name="GUI/GroupDefinitions/" value="m=254e0435-0f3f-445b-a35d-1f6d774a0fc3"/>
<ExtraDataItem name="GUI/LastItemSelected" value="m=from_diag"/>
<ExtraDataItem name="GUI/LastWindowPosition" value="255,217,770,550"/>
<ExtraDataItem name="GUI/RecentFolderHD" value="//diag03-pc/vbox_hdd"/>
<ExtraDataItem name="GUI/RecentListHD" value="\diag03-pc\vbox_hdd\xp_legacy_mode.vdi"/>
<ExtraDataItem name="GUI/SplitterSizes" value="255,510"/>
<ExtraDataItem name="GUI/Toolbar/MachineTools/Order" value="None"/>
<ExtraDataItem name="GUI/UpdateCheckCount" value="3"/>
<ExtraDataItem name="GUI/UpdateDate" value="1 d, 2017-10-23, stable, 5.2.0"/>
</ExtraData>
<MachineRegistry>
<MachineEntry uuid="{254e0435-0f3f-445b-a35d-1f6d774a0fc3}" src="C:\Users\bogna\VirtualBox VMs\from_diag\from_diag.vbox"/>
</MachineRegistry>
<NetserviceRegistry>
<DHCPServers>
<DHCPServer networkName="HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/>
</DHCPServers>
</NetserviceRegistry>
<SystemProperties defaultMachineFolder="C:\Users\bogna\VirtualBox VMs" defaultHardDiskFormat="VDI" VRDEAuthLibrary="VBoxAuth" webServiceAuthLibrary="VBoxAuth" LogHistoryCount="3" exclusiveHwVirt="false"/>
<USBDeviceFilters/>
</Global>
</VirtualBox>
如何从这个 xml 的 MachineEntrys 中获取 uuid 和 src 到一个数组?
.net 4.5
我试过了,因为数组是空的:
** 请勿编辑此文件。
** 如果您在使用任何 VirtualBox 相关应用程序时更改此文件
** 是 运行,您的更改稍后会被覆盖,不会生效。
** 使用 VBoxManage 或 VirtualBox Manager GUI 进行更改。
void getfromxml()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(vboxxml);
XmlNodeList nodes = doc.DocumentElement.SelectNodes("/VirtualBox/Global/MachineRegistry/MachineEntry");
int i = 0;
foreach (XmlNode node in nodes)
{
machines[i,0] = node.Attributes["uuid"].Value;
machines[i,1] = node.Attributes["src"].Value;
i++;
}
}
您忽略了 XML 命名空间。您可以尝试:
XmlNodeList nodes = doc.DocumentElement.SelectNodes("//*[local-name()='MachineEntry']");
(如果需要,使用 local-name() 函数扩展其他级别)
<?xml version="1.0"?>
<!--
** DO NOT EDIT THIS FILE.
** If you make changes to this file while any VirtualBox related application
** is running, your changes will be overwritten later, without taking effect.
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
-->
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.12-windows">
<Global>
<ExtraData>
<ExtraDataItem name="GUI/GroupDefinitions/" value="m=254e0435-0f3f-445b-a35d-1f6d774a0fc3"/>
<ExtraDataItem name="GUI/LastItemSelected" value="m=from_diag"/>
<ExtraDataItem name="GUI/LastWindowPosition" value="255,217,770,550"/>
<ExtraDataItem name="GUI/RecentFolderHD" value="//diag03-pc/vbox_hdd"/>
<ExtraDataItem name="GUI/RecentListHD" value="\diag03-pc\vbox_hdd\xp_legacy_mode.vdi"/>
<ExtraDataItem name="GUI/SplitterSizes" value="255,510"/>
<ExtraDataItem name="GUI/Toolbar/MachineTools/Order" value="None"/>
<ExtraDataItem name="GUI/UpdateCheckCount" value="3"/>
<ExtraDataItem name="GUI/UpdateDate" value="1 d, 2017-10-23, stable, 5.2.0"/>
</ExtraData>
<MachineRegistry>
<MachineEntry uuid="{254e0435-0f3f-445b-a35d-1f6d774a0fc3}" src="C:\Users\bogna\VirtualBox VMs\from_diag\from_diag.vbox"/>
</MachineRegistry>
<NetserviceRegistry>
<DHCPServers>
<DHCPServer networkName="HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/>
</DHCPServers>
</NetserviceRegistry>
<SystemProperties defaultMachineFolder="C:\Users\bogna\VirtualBox VMs" defaultHardDiskFormat="VDI" VRDEAuthLibrary="VBoxAuth" webServiceAuthLibrary="VBoxAuth" LogHistoryCount="3" exclusiveHwVirt="false"/>
<USBDeviceFilters/>
</Global>
</VirtualBox>
如何从这个 xml 的 MachineEntrys 中获取 uuid 和 src 到一个数组? .net 4.5
我试过了,因为数组是空的:
** 请勿编辑此文件。 ** 如果您在使用任何 VirtualBox 相关应用程序时更改此文件 ** 是 运行,您的更改稍后会被覆盖,不会生效。 ** 使用 VBoxManage 或 VirtualBox Manager GUI 进行更改。
void getfromxml()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(vboxxml);
XmlNodeList nodes = doc.DocumentElement.SelectNodes("/VirtualBox/Global/MachineRegistry/MachineEntry");
int i = 0;
foreach (XmlNode node in nodes)
{
machines[i,0] = node.Attributes["uuid"].Value;
machines[i,1] = node.Attributes["src"].Value;
i++;
}
}
您忽略了 XML 命名空间。您可以尝试:
XmlNodeList nodes = doc.DocumentElement.SelectNodes("//*[local-name()='MachineEntry']");
(如果需要,使用 local-name() 函数扩展其他级别)