如何从此 xml 文档中提取数据

Posted

技术标签:

【中文标题】如何从此 xml 文档中提取数据【英文标题】:How to extract the data from this xml document 【发布时间】:2020-09-15 21:57:49 【问题描述】:

我想从每个行星和小行星(不在此示例中)提取数据并将其放入字符串列表中。 所以一个行星列表将包含(按顺序):

姓名 位置 x 位置 y 半径 速度 x 速度 y (any) - 邻居

我在遍历 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>

谁能帮忙?

【问题讨论】:

【参考方案1】:

你说的是XML反序列化。走另一条路(对象到xml)称为序列化

在 *** 和一般的网络上有很多这两个例子。使用这些术语进行搜索应该会对您有所帮助。

这是一个来自 *** 的好消息:

How to Deserialize XML document

【讨论】:

【参考方案2】:

我们可以通过以下方式定义表示 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

【讨论】:

以上是关于如何从此 xml 文档中提取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从确切响应中提取 XML 值

如何使用 R 从 xml 页面中提取信息

正则表达式。如何从xml文档中提取值[关闭]

您好,试图弄清楚如何仅从此文本中提取文件路径

如何从此字符串'opimus_rise_issue_command_201912.txt'中提取该月的最后一天日期

如何使用PHP从此代码中的锚标记中提取id和url?