我正在尝试导入一个包含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。
非常感谢您的帮助
彼得。
答案 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();