Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > XML как реестр. |
Автор: iddqd 17.4.2007, 13:13 | ||||||||
Довольно давно я это реализовывал в дельфи. Сейчас появилась необходимость сделать то же самое в XML. Чуть в том, что была одна функция для записи и одна для чтения, которые могут писать и читать все, что угодно. ДЛя начала с чтением... там попроще. Выглядить должно так:
Например:
Сейчас я чтение делаю примерно так:
Теперь несколько нюансов. Нормальный ли это подход в принципе или может в C# есть функции, которые принимают сразу последовательность для чтения? Как реализовать чтение с аттрибутами, т.е. чтоб строка запроса выглядила вот так:
Т.е. есть разные ветвления нодов с разными аттрибутами id и number, например. С тем, как сделанно сейчас будет всегда читать первый нод. Пожалуйста, посоветуйте реализацию, а то боюсь, что делаю очень сложными путями, а С# позволяет гораздно легче. |
Автор: tol05 17.4.2007, 13:23 |
есть 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 + "']"); |
Автор: iddqd 17.4.2007, 13:56 | ||
Мда, не мало там читать и справка не лучшая. Не подскажешь, как буде выглядеть XPath для такого выржения:
И можно ли с использованием XPath записывать значения? Добавлено через 2 минуты и 55 секунд Если конкретно, то неочень понятно как передавать аттрибуты. Добавлено через 6 минут и 50 секунд Прошу прощения, забыл про такую прекрасну вещь, как гугл. Но вопрос про запись остается открытым. И можно ли создать все ноды автоматически по этмоу пути? |
Автор: tol05 17.4.2007, 14:06 |
doc.SelectSingleNode("ProductionQuery[@id='12']/Query[@number='34']/Passport/Printable/PassportNumber"); |
Автор: iddqd 17.4.2007, 14:12 |
tol05, на вопрос про запись ответь, пожалуйста. http://xml.nsu.ru/ - очень рекоммендую, суперский сайт про xml и все примыкающие технологии. |
Автор: iddqd 17.4.2007, 16:45 |
После прочтения некоторого кол-ва материалов по XPath мне кажется, что добавлять записи такими же способом (я имею в виду указанием полного пути) придется парсить строки и добавлять ноды по очереди :( Или все же есть способ проще? |
Автор: tol05 17.4.2007, 16:57 |
Извини, iddqd, зубы ездил лечить. Я не очень большой специалист по Xml и XPath, если честно. Но думаю, что XPath используется для навигации, в конце концов ты все равно получаешь XmlElement или XmlNode, а в файл вообще записываешь XmlDocument (после того, как ты поизвращался с его XmlElement или XmlNode) ![]() По поводу добавления записей в множество XmlNode-ов: насколько я помню, все равно нужно это множество получить и потом в цикле поизменять значения. Как в обычном потоке. Так что если кто из спецов откликнется, то буду рад сам подучиться |
Автор: iddqd 17.4.2007, 17:07 |
Нашел довольно интересную вещь, правда, она немного странно работает. Не всегда, казалось бы правильный, запрос подтверждает. http://www.codeproject.com/csharp/xpathstore.asp |
Автор: iddqd 17.4.2007, 18:06 |
Никак не получается заставить этот компонент больше одного параметра записывать :( И как-то он иногда перезаписывает уже существующие ноды. Может кто-нибудь пояснить немного? А то опыта в c# мало :( |
Автор: Мурлыкатам_ 11.4.2008, 14:11 | ||
Если речь идет о неком конфигурировании, то можно использовать 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.aspx?query=writing+xml&brand=msdn&locale=ru-ru&refinement=&lang=ru-ru №1 в поиске по мсдн-у: http://msdn2.microsoft.com/en-us/library/4d1k42hb(vs.71).aspx |
Автор: mr.DUDA 11.4.2008, 15:32 |
Мурлыкатам_, на дату темы посмотрите... ![]() |
Автор: Мурлыкатам_ 18.4.2008, 13:00 |
mr.DUDA, Зато сообщение ++; ![]() ![]() ![]() Какая разница какая дата, если хоцацца оставить свой след в истории форума, мне ж тоже хочется 8000 сообщений набрать =)))))))) Но на все темы с 0 ответов не успеваешь... А тут тема помоему не закрыта, вдруг кто-то будет искать подобный вопрос, наткнется на решение, улыбнется и скажет спасибо винград! Что даже старые вопросы освещают и не оставляют без внимания, скока бы я еще мучался, если бы добрый мурлыкатам не оставил тут свой пост!!! А об этом вы подумали, многоуважаемый, mr.DUDA? ![]() |