C# 解析XML时遇到问题
我在解析Centovast v3 XML API中的某些XML时遇到一些问题。我已经使用了他们的2.xapi并对其进行了解析,但是响应已经完全改变,我似乎无法使任何现有的解析器工作。我试过的每一个例子似乎都不能正确地获取数据 我使用的是.NET3.5 4.0,也是可以接受的,任何例子都将不胜感激 XML文档示例如下:C# 解析XML时遇到问题,c#,xml,xml-parsing,xml-serialization,C#,Xml,Xml Parsing,Xml Serialization,我在解析Centovast v3 XML API中的某些XML时遇到一些问题。我已经使用了他们的2.xapi并对其进行了解析,但是响应已经完全改变,我似乎无法使任何现有的解析器工作。我试过的每一个例子似乎都不能正确地获取数据 我使用的是.NET3.5 4.0,也是可以接受的,任何例子都将不胜感激 XML文档示例如下: <?xml version=""1.0"" encoding=""UTF-8""?> <centovacast version=""3.0.0"" host=""
<?xml version=""1.0"" encoding=""UTF-8""?>
<centovacast version=""3.0.0"" host=""0.0.0.0:2199"">
<response type=""success"">
<message>OK</message>
<data>
<row>
<id>1</id>
<parameters>
<ipaddress>127.0.0.1</ipaddress>
<port>2198</port>
<title>Local server</title>
<isrelay>1</isrelay>
<ismaster>1</ismaster>
<defaultip>0.0.0.0</defaultip>
<daemontype>RPC</daemontype>
<hostname/>
</parameters>
<status>
<memfree>101879808</memfree>
<memtotal>1073741824</memtotal>
<memavail>778653696</memavail>
<swapfree>1077501952</swapfree>
<swaptotal>1077501952</swaptotal>
<buffers>172535808</buffers>
<cpuload>0.00</cpuload>
<uptime>13372713</uptime>
<machine>Intel(R) Xeon(R) CPU E5620</machine>
<osbrief>Linux</osbrief>
<osdetails>2.6.18</osdetails>
<other>
<Processes>
<field>n</field>
<field>72</field>
</Processes>
<Kernel>
<field>s</field>
<field>Linux version 2.6.18</field>
</Kernel>
<row>
<field>f</field>
<field>0.000000</field>
</row>
<row>
<field>f</field>
<field>0.000000</field>
</row>
<row>
<field>f</field>
<field>0.000000</field>
</row>
</other>
<online>1</online>
</status>
<accounts>
<licensed>-1</licensed>
<active>1</active>
<inactive>0</inactive>
</accounts>
</row>
</data>
</response>
</centovacast>
但是它返回的数据都是在一个大的混乱中,而不是在不同的值中
我希望序列化/反序列化,因为我正在进行的XML调用为集群中的每台服务器返回上述结果,因此它可能是一个相当大的结果集,但我并不挑剔,我很高兴能够将数据放入正确的变量中,以便使用它们。xml.degenantsStatus将返回整个元素状态及其子元素。如果要枚举其元素,请使用以下代码:
var xml = XDocument.Parse(xmldata);
var query = from p in xml.Descendants("status")
select p;
foreach (var record in query)
MessageBox.Show(record.Value);
xml.Descendants("status").Descendants();
以下是以匿名类型存储某些元素的示例:
var data =
XDocument.Parse(xml)
.Root
.Element("response")
.Element("data")
.Elements("row")
.Select(row =>
new
{
Id = Int32.Parse(row.Element("id").Value),
Parameters = new
{
IpAddress = row.Element("parameters").Element("ipaddress").Value,
port = Int32.Parse(row.Element("parameters").Element("port").Value),
},
Status = new
{
MemFree = Int32.Parse(row.Element("status").Element("memfree").Value),
},
});
您可以在选项值可能位于的位置插入自己的具体类型和空检查。您需要从XML中获得什么?以什么格式?我想收集参数中的数据、状态以及ID。。我想让它们保持本机格式,例如isrelay是bool,port是int,等等这似乎工作得很好,但是如果我先在foreach循环中解析,然后解析,数据与正确的服务器不匹配,因此,我需要同时解析这两个和所有数据,或者找到一种方法对它们进行排序。我可以使用上面的示例将所有名称和值放入字典中,然后根据需要/需要提取数据吗?比如说使用dict[ipaddress]或类似的东西?