Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2013, 20:25   #1
Banavia
Новичок
Джуниор
 
Регистрация: 28.07.2013
Сообщений: 5
По умолчанию [XML] Нахождение аттрибута элемента по значению дочернего элемента.

Здравствуйте!
Подскажите пожалуйста есть ли возможность определить значение аттрибута элемента если известно значение его дочернего элемента? Имя этого элемента и его аттрибута известно, и имя дочернего элемента тоже известно. У меня в XML много одинаково названных элементов, но с разными значениями ат. Буду очень благодарен
Banavia вне форума Ответить с цитированием
Старый 28.07.2013, 20:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

приведите лучше краткий пример вашего XML и того что нужно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.07.2013, 20:53   #3
Banavia
Новичок
Джуниор
 
Регистрация: 28.07.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
приведите лучше краткий пример вашего XML и того что нужно.

На 1.jpg изображена структура. Мне нужно как то отредактировать ВСЕ что внутри элемента <VESSEL> (изменить значения, добавить новые элементы, удалить ненужные)- но именно того элемента где <name> Kethan Scaner #2 </name>. Его значения аттрибутов всегда будут разные. Можно просто создавать элементы с разными значениями - <VESSEL1>, <VESSEL2> и т.д. Но потом мне надо этот XML перебрать в конфиг игры. А если сделать все разным сильно подскочет нагрузка на память и код для переборки сложнее ьудет... хотелось бы сделать проще)
Изображения
Тип файла: jpg 1.jpg (46.6 Кб, 127 просмотров)
Banavia вне форума Ответить с цитированием
Старый 28.07.2013, 21:36   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

скиньте сам XML(в архиве) чтоб я мог код проверить.
а то XPath чуток подзабыл.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.07.2013, 21:45   #5
Banavia
Новичок
Джуниор
 
Регистрация: 28.07.2013
Сообщений: 5
По умолчанию

Вот пожалуйста =) Буду оочень признателен если поможете. Много вариантов перебрал, но за день так и не решил проблему..
Вложения
Тип файла: zip persistent.zip (20.1 Кб, 8 просмотров)
Banavia вне форума Ответить с цитированием
Старый 28.07.2013, 22:21   #6
Banavia
Новичок
Джуниор
 
Регистрация: 28.07.2013
Сообщений: 5
По умолчанию

Кое как разобрался как найти значение аттрибута элемента, если я знаю значение его дочернего элемента
Не знаю как сделать окно C#, поэтому вставлю в рамку PHP.
PHP код:
public static string attr;
static 
void Main(string[] args)
        {
            
XmlDocument configDoc = new XmlDocument();
            
configDoc.Load("C:\\persistent.xml");

            foreach (
XmlElement uN in configDoc.GetElementsByTagName("VESSEL"))
            {
                foreach (
XmlElement uN2 in uN.GetElementsByTagName("name"))
                {
                    if (
uN2.InnerText == "Kethan Scaner #2") { Console.WriteLine("OK"); attr uN.GetAttribute("xmlns"); }
                }
                
            }
            
Console.WriteLine(attr);
            
Console.ReadKey();
        } 
Только есть еще один вопросик:
Есть ли возможность "вклинить" в конец элемента еще дочерних элементов? ТО есть по сути вставить посреди XML дополнительный код, не разбивая файл на куски для этого..?

Последний раз редактировалось Banavia; 28.07.2013 в 22:23. Причина: Дополнил код
Banavia вне форума Ответить с цитированием
Старый 28.07.2013, 22:29   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Есть ли возможность "вклинить" в конец элемента еще дочерних элементов? ТО есть по сути вставить посреди XML дополнительный код, не разбивая файл на куски для этого..?
просто добавляйте нужные элементы(XmlNode) в нужные места.
Цитата:
Кое как разобрался как найти значение аттрибута элемента, если я знаю значение его дочернего элемента
хорошо(чуть не успел)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.07.2013, 22:36   #8
Banavia
Новичок
Джуниор
 
Регистрация: 28.07.2013
Сообщений: 5
По умолчанию

Спасибо вам большое за помощь Буду дальше разбираться.
Banavia вне форума Ответить с цитированием
Старый 29.07.2013, 00:20   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Banavia

Мне нужно как то отредактировать ВСЕ что внутри элемента <VESSEL> (изменить значения, добавить новые элементы, удалить ненужные)- но именно того элемента где <name> Kethan Scaner #2 </name>

как-то так:

Код:
var xml = new XmlDocuemnt();
xml.Load(...);

var vessel = xml.SelectSingleNode(string.Format("//vessel/name[text()='{0}']/parent::node()", текст));
Rififi вне форума Ответить с цитированием
Старый 29.07.2013, 00:39   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там неймспейсы
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в массиве привязать номер элемента к его значению? 22hope22 C# (си шарп) 0 31.05.2013 22:22
XML DOM Поиск элемента по значению Spot Общие вопросы Delphi 3 21.02.2013 09:50
XML Поиск элемента по значению атрибуту и запись в новый файл Rastamans C# (си шарп) 0 15.12.2012 22:34
Найти количество элементов стоящих после максимального по значению элемента RealUnited Паскаль, Turbo Pascal, PascalABC.NET 3 05.12.2012 20:07
Найти среднее значение элементов и номер элемента массива, ближайшего к среднему по значению Romashka) Общие вопросы C/C++ 1 06.11.2012 18:55