#c# #arrays #string
Вопрос:
Итак, у меня есть эта очень длинная строка
<Type>3</Type>
<X>1018</X>
<Y>800</Y>
<Delay>22</Delay>
</MouseMovementEvent>
<MouseMovementEvent>
<Type>3</Type>
<X>1014</X>
<Y>805</Y>
<Delay>22</Delay>
</MouseMovementEvent>
<MouseMovementEvent>
<Type>3</Type>
<X>1010</X>
<Y>810</Y>
<Delay>62</Delay>
</MouseMovementEvent>
</MouseMovement>
</MacroEvent>
<MacroEvent>
<Type>2</Type>
<MouseEvent>
<MouseButton>1</MouseButton>
<State>1</State>
</MouseEvent>
</MacroEvent>
<MacroEvent>
<Type>2</Type>
<MouseEvent>
и так далее…
Как извлечь значения «x» и «y» в массив и [X, Y] и «задержку» в отдельный массив? C#
Комментарии:
1. Ваша строка выглядит как xml — так что попробуйте ее проанализировать.
2. Да, по сути, это XML-файл, но я думал просто поместить его в одну строковую переменную 😀
Ответ №1:
Это можно легко сделать с помощью Linq to XML. Я попытался исправить данный фрагмент xml, чтобы он был допустимым XML.
Примечание: XElement также может загружать xml-файлы.
XElement events = XElement.Parse( @"<Root>
<MacroEvent>
<MouseMovement>
<MouseMovementEvent>
<Type>3</Type>
<X>1018</X>
<Y>800</Y>
<Delay>22</Delay>
</MouseMovementEvent>
<MouseMovementEvent>
<Type>3</Type>
<X>1014</X>
<Y>805</Y>
<Delay>22</Delay>
</MouseMovementEvent>
<MouseMovementEvent>
<Type>3</Type>
<X>1010</X>
<Y>810</Y>
<Delay>62</Delay>
</MouseMovementEvent>
</MouseMovement>
</MacroEvent>
<MacroEvent>
<Type>2</Type>
<MouseEvent>
<MouseButton>1</MouseButton>
<State>1</State>
</MouseEvent>
</MacroEvent>
</Root>");
IEnumerable<((int x, int y) coords, int delay)> movementEvents = from mouseMovementEvent in events.Descendants("MouseMovementEvent")
select ((Int32.Parse(mouseMovementEvent.Element("X").Value), Int32.Parse(mouseMovementEvent.Element("Y").Value)), Int32.Parse(mouseMovementEvent.Element("Delay").Value));
(int x, int y)[] coords = movementEvents.Select(e => e.coords).ToArray();
int[] delay = movementEvents.Select(e => e.delay).ToArray();