2014-10-14 1 views
0

Как я должен преобразовать XElement, как показано ниже в массив точек (Point может быть классом с переменной X и Y):Преобразование XElement в массив

<Points xmlns=""> 
    <Point X="420" Y="240" /> 
    <Point X="400" Y="298" /> 
    <Point X="350" Y="335" /> 
    <Point X="289" Y="335" /> 
    <Point X="239" Y="298" /> 
    <Point X="220" Y="239" /> 
    <Point X="239" Y="181" /> 
    <Point X="289" Y="144" /> 
    <Point X="350" Y="144" /> 
    <Point X="400" Y="181" /> 
</Points> 
+0

Какую операционную систему вы используете и какие инструменты доступны? – Cyrus

+0

@cyrus iam на окнах с использованием .net 4.5, vs 2012 – Anonymous

+0

@ Анонимный язык C#/VB? Вы что-то пробовали? – har07

ответ

1

Вы можете просто ввести отливку XAttribute в int:

Point[] points = (from pt in xe.Elements("Point") 
        let x = (int)pt.Attribute("X") 
        let y = (int)pt.Attribute("Y") 
        select new Point(x, y)).ToArray(); 

Таким образом, исключение не будет выброшено в случае атрибут не найден в текущем элементе , не говоря уже о том, что он короче. Или, если вы предпочитаете синтаксис метода:

Point[] points = xe.Elements("Point") 
        .Select(p => new Point((int)p.Attribute("X"), (int)p.Attribute("Y"))) 
        .ToArray(); 
2

Это работает для меня, была в состоянии получить массив из xe XElement. (Там может быть лучше, хотя)

Point[] points = (from pt in xe.Elements("Point") 
        let x = Convert.ToInt32(pt.Attribute("X").Value) 
        let y = Convert.ToInt32(pt.Attribute("Y").Value) 
        select new Point(x, y)).ToArray();