Как я могу хранить атрибуты узла XML в массиве строк? (Reframed) - PullRequest
0 голосов
/ 12 марта 2009

Дубликат как мне сохранить атрибуты узла xml в массиве строк , вам следует отредактировать исходный вопрос.

Я новичок, поэтому я перефразирую ранее заданный вопрос. У меня есть проект, в котором мой xmldoc создается с помощью класса XmlDocument, а затем загружается с помощью метода xmldoc.Load (). С помощью метода addnodes () я добавляю узлы в дерево, поэтому он отображается в форме win. Теперь, когда я нажимаю на узел xml в древовидном представлении, его атрибуты отображаются в списке. Теперь я разделил всю логику в пользовательском интерфейсе и серверной части. Теперь я хочу, чтобы мой внутренний класс содержал метод для отображения атрибутов (имя и значение) выбранного узла xml, которые хранятся в массиве и возвращаются в виде строки моему внешнему классу в событии treev_AfterSelect. Как я могу это сделать? Мне нужно сохранить атрибуты узла, я нажимаю на winform в строковом массиве и отображать в listbox. Как это сделать?

Ответы [ 2 ]

1 голос
/ 12 марта 2009

Я на своем горьком опыте обнаружил, что использование свойства Tag создает хрупкие решения. Безопасный для типов способ сопоставления TreeNode с XmlElement с заключается в создании Dictionary<TreeNode, XmlElement>. Сначала это сложнее, чем использование свойства Tag, но это делает связь чрезвычайно явной. (Я только вчера исправил ошибку, связанную с тем, что один фрагмент кода сохраняет ключи к объектам в свойстве Tag, в то время как другой ожидал, что Tag будет содержать сами объекты.)

Таким образом, код в событии AfterSelect будет выглядеть примерно так:

TreeNode n = sender as TreeNode;
if (n != null)
{
   string[] result = TreeNodeMap[n].Attributes
      .Select(x => x.Name + "=" + x.Value)
      .ToArray();
}
1 голос
/ 12 марта 2009

Здесь можно было бы использовать больше деталей, но я рискну предположить:

Вы сохраняете элемент XmlElement в свойстве Tag TreeNode, верно? Затем вы хотите взять этот XmlElement из тега события AfterSelect и передать его методу, который будет возвращать IEnumerable из атрибутов (и значений?). IEnumerable вместо string [] должен быть гибким.

Это довольно просто, и я оставлю детали "в качестве упражнения", но просто переберу элемент. Атрибуты и добавлю в список каждое имя и значение атрибута. Отформатируйте их как «имя = значение», если хотите. Затем просто верните список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...