如何将导入的XML点拆分为单独的组?

时间:2012-06-12 14:55:00

标签: c# wpf xml geometry point

我正在尝试导入一个包含drawLine函数的点列表的XML文件,它是典型的drawLine函数,给它X1,Y1,X2,Y2坐标,它将绘制线。我在XML文件中的内容如下:

<LINES>
  <LINE>
    <ID>J3U93</ID>
    <POINT X="454.5" Y="93.5"></POINT>
    <POINT X="454.5" Y="371"></POINT>
    <POINT X="433.5" Y="351"></POINT>
    <POINT X="433.5" Y="329.5"></POINT>
  </LINE>
  <LINE>
    <ID>U231U93</ID>
    <POINT X="23.5" Y="526"></POINT>
    <POINT X="417" Y="341.875"></POINT>
    <POINT X="380" Y="341.875"></POINT>
    <POINT X="188.5" Y="526"></POINT>
    <POINT X="23.5" Y="526"></POINT>
  </LINE>
   .
   .
</LINES>

每一行都有一个ID可以在文件中区分它,我的线将连接起来基本上形成Z形图案,即根据LINE标签内的点数量而变化的匝数。

我需要知道的是,或者如果你能指出正确的方向,我如何将ID标签中的一组线与另一个ID标签中的另一组线分开?

到目前为止,我试过了:

List<Point> Points;

XDocument lineDataXml = XDocument.Load(filename);

Points = (
     from point in lineDataXml.Descendants("LINE")
      select new Point 
      { 
          X = Double.Parse(point.Attribute("X").Value), 
          Y = Double.Parse(point.Attribute("Y").Value) 
      }).ToList();

 foreach(Point a in Points)
 {
     Console.WriteLine(a);
 }

但是这会返回XML中所有点的列表,而不知道哪些点属于哪个ID。

非常感谢您的帮助

彼得。

1 个答案:

答案 0 :(得分:2)

试试这个,

XElement root = XElement.Load(file); // or .Parse(string)
var lines = root.Descendants("LINE")
    .Select(line =>
        new
        {
            Id = (string)line.Element("ID"),
            Points = line.Elements("POINT")
                .Select(p => new PointF
                {
                    X = (float)p.Attribute("X"),
                    Y = (float)p.Attribute("Y")
                }).ToArray()
        }).ToArray();