![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
iddqd |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: 2 Всего: 2 |
Довольно давно я это реализовывал в дельфи. Сейчас появилась необходимость сделать то же самое в XML.
Чуть в том, что была одна функция для записи и одна для чтения, которые могут писать и читать все, что угодно. ДЛя начала с чтением... там попроще. Выглядить должно так:
Например:
Сейчас я чтение делаю примерно так:
Теперь несколько нюансов. Нормальный ли это подход в принципе или может в C# есть функции, которые принимают сразу последовательность для чтения? Как реализовать чтение с аттрибутами, т.е. чтоб строка запроса выглядила вот так:
Т.е. есть разные ветвления нодов с разными аттрибутами id и number, например. С тем, как сделанно сейчас будет всегда читать первый нод. Пожалуйста, посоветуйте реализацию, а то боюсь, что делаю очень сложными путями, а С# позволяет гораздно легче. -------------------- |
||||||||
|
|||||||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
есть XPath-выражения и метод XmlDocument.SelectSingleNode(string XPath-expression)
в выражении ставишь любые пути, любые значения аттрибутов. http://www.raleigh.ru/TR/REC-xpath-19991116-ru.html например так: string name = "someone"; XmlDocument doc = ... ... doc.SelectSingleNode("properties/property[@name='" + name + "']"); Это сообщение отредактировал(а) tol05 - 17.4.2007, 13:25 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
iddqd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: 2 Всего: 2 |
Мда, не мало там читать и справка не лучшая.
Не подскажешь, как буде выглядеть XPath для такого выржения:
И можно ли с использованием XPath записывать значения? Добавлено через 2 минуты и 55 секунд Если конкретно, то неочень понятно как передавать аттрибуты. Добавлено через 6 минут и 50 секунд Прошу прощения, забыл про такую прекрасну вещь, как гугл. Но вопрос про запись остается открытым. И можно ли создать все ноды автоматически по этмоу пути? -------------------- |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
doc.SelectSingleNode("ProductionQuery[@id='12']/Query[@number='34']/Passport/Printable/PassportNumber");
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
iddqd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: 2 Всего: 2 |
tol05, на вопрос про запись ответь, пожалуйста.
http://xml.nsu.ru/ - очень рекоммендую, суперский сайт про xml и все примыкающие технологии. -------------------- |
|||
|
||||
iddqd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: 2 Всего: 2 |
После прочтения некоторого кол-ва материалов по XPath мне кажется, что добавлять записи такими же способом
(я имею в виду указанием полного пути) придется парсить строки и добавлять ноды по очереди :( Или все же есть способ проще? -------------------- |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Извини, iddqd, зубы ездил лечить.
Я не очень большой специалист по Xml и XPath, если честно. Но думаю, что XPath используется для навигации, в конце концов ты все равно получаешь XmlElement или XmlNode, а в файл вообще записываешь XmlDocument (после того, как ты поизвращался с его XmlElement или XmlNode) ![]() По поводу добавления записей в множество XmlNode-ов: насколько я помню, все равно нужно это множество получить и потом в цикле поизменять значения. Как в обычном потоке. Так что если кто из спецов откликнется, то буду рад сам подучиться -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
iddqd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: 2 Всего: 2 |
Нашел довольно интересную вещь, правда, она немного странно работает. Не всегда, казалось бы правильный, запрос подтверждает.
http://www.codeproject.com/csharp/xpathstore.asp -------------------- |
|||
|
||||
iddqd |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: 2 Всего: 2 |
Никак не получается заставить этот компонент больше одного параметра записывать :(
И как-то он иногда перезаписывает уже существующие ноды. Может кто-нибудь пояснить немного? А то опыта в c# мало :( -------------------- |
|||
|
||||
Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
Если речь идет о неком конфигурировании, то можно использовать ConfigurationManager, который работает с хмл файлами.
Если нужно работать с произвольным хмл файлом, то можно сделать это с помощью XPathNavigator. С проблемой записи не сталкивался. Но пологаю:
У мя статья в мсдн ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/WD_XML/html/1f8904f1-1900-44eb-9956-8fcfcbb0189c.htm Или набери XmlWriter или в мсдн, или в гугле... http://search.msdn.microsoft.com/Default.a...&lang=ru-ru №1 в поиске по мсдн-у: http://msdn2.microsoft.com/en-us/library/4...2hb(vs.71).aspx Это сообщение отредактировал(а) Мурлыкатам_ - 11.4.2008, 14:32 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Мурлыкатам_, на дату темы посмотрите...
![]() -------------------- ![]() |
|||
|
||||
Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
mr.DUDA, Зато сообщение ++;
![]() ![]() ![]() Какая разница какая дата, если хоцацца оставить свой след в истории форума, мне ж тоже хочется 8000 сообщений набрать =)))))))) Но на все темы с 0 ответов не успеваешь... А тут тема помоему не закрыта, вдруг кто-то будет искать подобный вопрос, наткнется на решение, улыбнется и скажет спасибо винград! Что даже старые вопросы освещают и не оставляют без внимания, скока бы я еще мучался, если бы добрый мурлыкатам не оставил тут свой пост!!! А об этом вы подумали, многоуважаемый, mr.DUDA? ![]() Это сообщение отредактировал(а) Мурлыкатам_ - 18.4.2008, 13:04 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |