如何从此 xml 文档中提取数据
How to extract the data from this xml document
我想从每个行星和小行星(不在本例中)提取数据并将其放入字符串列表中。
所以一个行星列表将包含(按顺序):
- 名字
- 位置 x
- 位置 y
- 半径
- 速度 x
- 速度y
(任何)- 邻居
我在遍历 xml 时遇到了很多麻烦,而且关于这个 imo 的好教程也不多。
xml:
<galaxy>
<planet>
<name>Kobol</name>
<position>
<x>45</x>
<y>310</y>
<radius>7</radius>
</position>
<speed>
<x>0.3</x>
<y>-0.6</y>
</speed>
<neighbours>
<planet>Unicron</planet>
<planet>Koarth</planet>
</neighbours>
<color>blue</color>
<oncollision>blink</oncollision>
</planet>
<planet>
<name>Namek</name>
<position>
<x>60</x>
<y>102</y>
<radius>15</radius>
</position>
<speed>
<x>0.1</x>
<y>0.2</y>
</speed>
<neighbours>
<planet>Helicon</planet>
<planet>Synnax</planet>
<planet>Xenex</planet>
<planet>Alderaan</planet>
</neighbours>
<color>orange</color>
<oncollision>blink</oncollision>
</planet>
</galaxy>
有人可以帮忙吗?
你说的是XML反序列化。另一种方式(反对 xml)称为 Serialization
一般来说,在 Whosebug 和 Web 上有很多这两种情况的示例。使用这些字词进行搜索应该会对您有所帮助。
这是来自 Whosebug 的一篇好文章:
How to Deserialize XML document
我们可以通过以下方式定义表示 Xml 的模型:
[XmlRoot("galaxy")]
public class Galaxy
{
[XmlElement("planet")]
public List<Planet> Planets { get; set; }
}
public class Planet
{
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("position")]
public Position Position { get; set; }
[XmlElement("speed")]
public Speed Speed { get; set; }
[XmlElement("neighbours")]
public List<Neighbour> Neighbours { get; set; }
[XmlElement("color")]
public string Color { get; set; }
[XmlElement("oncollision")]
public string OnCollision { get; set; }
}
public class Position
{
[XmlElement("x")]
public double X { get; set; }
[XmlElement("y")]
public double Y { get; set; }
[XmlElement("radius")]
public double Radius { get; set; }
}
public class Speed
{
[XmlElement("x")]
public double X { get; set; }
[XmlElement("y")]
public double Y { get; set; }
}
public class Neighbour
{
[XmlElement("planet")]
public string Name { get; set; }
}
请注意我们如何使用属性来定义 Xml 的布局,并将其映射回对象。
有了这个,我们可以通过以下方式反序列化 Xml:
XmlSerializer serializer = new XmlSerializer(typeof(Galaxy));
using (FileStream stream = new FileStream(filePath, FileMode.Open))
{
Galaxy galaxy = (Galaxy) serializer.Deserialize(stream);
foreach (Planet planet in galaxy.Planets)
{
Console.WriteLine(planet.Name);
}
}
输出
Kobol
Namek
我想从每个行星和小行星(不在本例中)提取数据并将其放入字符串列表中。 所以一个行星列表将包含(按顺序):
- 名字
- 位置 x
- 位置 y
- 半径
- 速度 x
- 速度y (任何)- 邻居
我在遍历 xml 时遇到了很多麻烦,而且关于这个 imo 的好教程也不多。
xml:
<galaxy>
<planet>
<name>Kobol</name>
<position>
<x>45</x>
<y>310</y>
<radius>7</radius>
</position>
<speed>
<x>0.3</x>
<y>-0.6</y>
</speed>
<neighbours>
<planet>Unicron</planet>
<planet>Koarth</planet>
</neighbours>
<color>blue</color>
<oncollision>blink</oncollision>
</planet>
<planet>
<name>Namek</name>
<position>
<x>60</x>
<y>102</y>
<radius>15</radius>
</position>
<speed>
<x>0.1</x>
<y>0.2</y>
</speed>
<neighbours>
<planet>Helicon</planet>
<planet>Synnax</planet>
<planet>Xenex</planet>
<planet>Alderaan</planet>
</neighbours>
<color>orange</color>
<oncollision>blink</oncollision>
</planet>
</galaxy>
有人可以帮忙吗?
你说的是XML反序列化。另一种方式(反对 xml)称为 Serialization
一般来说,在 Whosebug 和 Web 上有很多这两种情况的示例。使用这些字词进行搜索应该会对您有所帮助。
这是来自 Whosebug 的一篇好文章:
How to Deserialize XML document
我们可以通过以下方式定义表示 Xml 的模型:
[XmlRoot("galaxy")]
public class Galaxy
{
[XmlElement("planet")]
public List<Planet> Planets { get; set; }
}
public class Planet
{
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("position")]
public Position Position { get; set; }
[XmlElement("speed")]
public Speed Speed { get; set; }
[XmlElement("neighbours")]
public List<Neighbour> Neighbours { get; set; }
[XmlElement("color")]
public string Color { get; set; }
[XmlElement("oncollision")]
public string OnCollision { get; set; }
}
public class Position
{
[XmlElement("x")]
public double X { get; set; }
[XmlElement("y")]
public double Y { get; set; }
[XmlElement("radius")]
public double Radius { get; set; }
}
public class Speed
{
[XmlElement("x")]
public double X { get; set; }
[XmlElement("y")]
public double Y { get; set; }
}
public class Neighbour
{
[XmlElement("planet")]
public string Name { get; set; }
}
请注意我们如何使用属性来定义 Xml 的布局,并将其映射回对象。
有了这个,我们可以通过以下方式反序列化 Xml:
XmlSerializer serializer = new XmlSerializer(typeof(Galaxy));
using (FileStream stream = new FileStream(filePath, FileMode.Open))
{
Galaxy galaxy = (Galaxy) serializer.Deserialize(stream);
foreach (Planet planet in galaxy.Planets)
{
Console.WriteLine(planet.Name);
}
}
输出
Kobol
Namek