1

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 タグ内の 1 つの行セットを別の 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);
 }

しかし、これは、どのポイントがどの ID に属しているかを知らなくても、XML 内のすべてのポイントのリストを返します。

あなたの助けは大歓迎です

ピーター。

4

1 に答える 1

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();
于 2012-06-12T15:09:34.503 に答える