Привет %username%, сразу перейду к делу. Есть база данных, оформленная в программе DIA - вообщем графическая прорисовка таблиц в БД с оформлением данных о таблицах и параметрах в XML. Моя задача написать скрипт, который будет считывать данные с XML, после чего создавать БД SQL и PostGreSQL (хотя руководство тут пока ещё точно не определилось, но не суть важно). С XML работал я достаточно поверхностно - хранения малого количества данных - импорт/экспорт. Обходился обычной List<MyClassForDataSave> все это в коллекшен вперёд - serialiser и deserialize . Однако тут немного зашёл в тупик, вот пример XML: PHP: <?xml version="1.0" encoding="UTF-8"?> <dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> ... <dia:attribute name="name"> <dia:string>#Plants#</dia:string> </dia:attribute> <dia:attribute name="comment"> <dia:string>##</dia:string> </dia:attribute> <dia:attribute name="visible_comment"> <dia:boolean val="false"/> </dia:attribute> <dia:attribute name="tagging_comment"> <dia:boolean val="false"/> </dia:attribute> <dia:attribute name="underline_primary_key"> <dia:boolean val="true"/> </dia:attribute> <dia:attribute name="bold_primary_keys"> <dia:boolean val="false"/> </dia:attribute> <dia:attribute name="normal_font"> <dia:font family="monospace" style="0" name="Courier"/> </dia:attribute> <dia:attribute name="name_font"> <dia:font family="sans" style="80" name="Helvetica-Bold"/> </dia:attribute> <dia:attribute name="comment_font"> <dia:font family="sans" style="0" name="Helvetica"/> </dia:attribute> <dia:attribute name="normal_font_height"> <dia:real val="0.80000000000000004"/> </dia:attribute> <dia:attribute name="name_font_height"> <dia:real val="0.69999999999999996"/> </dia:attribute> <dia:attribute name="comment_font_height"> <dia:real val="0.69999999999999996"/> </dia:attribute> <dia:attribute name="attributes"> <dia:composite type="table_attribute"> <dia:attribute name="name"> <dia:string>#Id#</dia:string> </dia:attribute> <dia:attribute name="type"> <dia:string>#INT#</dia:string> ... Пытался просто подгрузить XML документ: PHP: XmlDocument doc = new XmlDocument(); doc.Load(@"C:\Dokumente\DBFromXMLTOSQL\struktur.xml"); Выбивает ошибку: the hex value 0x1F, is a invalid sign, line 1, position 1) Порылся - говорится что нужно обьявить namespace, что я и попробывал сделать: PHP: XmlSerializerNamespaces myNamespaces = new XmlSerializerNamespaces(); myNamespaces.Add("dia","http://www.lysator.liu.se/~alla/dia/"); И снова тоже самое - ошибка. Читал про XElement вроде как бы более удобный инструмент - попытался применить - однако не умел успеха. Хотелось бы услышать советы и предложения - как сделать удобней, понятней и проще, так как мне с фирмы скоро уходить,а если понадобиться доработать скрипт - не хочется что- бы человек долго бился в конвульсиях пытаясь вникнуть в код и провести рефакторинг на свой лад. Если возможно конкретный пример как как подгрузить XML формат приведенный выше. П.С. изначально файл сохранялся в разрешении .dia , однако там есть функция экспорта в xml. Это только часть xml кода, не ставл вставлять целый - ибо слишком здоровый - большу 40 таблиц занесенные в xml. Долбанная dia Спасибо тебе %username%!
Попробуйте этот символ в начале убрать. Например в hex-редакторе или там Notepad2, Notepad++ если они распознают этот символ.
inCode, не совсем то что я имел ввиду,для начала мне нужно с xml вытащить все таблицы. Не могу никак загрузить сам xml файл, вот и просил привести пример.Сегодня удалось выяснить причину ошибки - было целых две: 1. Файл был сжат 2.Кодировка была указана одна в xml файле, однако на самом деле установлена была иная. Отсель и ошибка, щас мучаюсь с парсом самого xml , приходиться засовывать foreach в foreach , по нескольку раз, что бы добраться до нужных параметров.Здесь тоже застрял, однако попытаюсь пока что ещё сам справится, если не получится напишу здесь, в надежде на новую идею и незамыленный взгляд. inCode, Евгений Спасибо что отписались, надеюсь если возникнут дальнейшие проблемы, поможете советом.
foreach, вложенный в другой foreach? Это что, пытаетесь найти нужные параметры перебором? Надо либо .SelectNodes/SelectSingleNode использовать, либо XPath
Я использую как раз .SelectNodes/SelectSingleNode, однако там следующая картина: 40 + таблиц, в каждой таблице n-var , для каждой var соответственно свой тип, ключи +, реляции к другим таблицам. То есть идёт foreach( Таблица1 ...Таблица 40) { foreach(var1...var-n) { ... } } Если есть другие предложения, буду рад выслушать
А подойдёт если xml будет меняться? то есть не из одной xml .- надо будет вытягивтаь таблицы базы данных, а из разных/нескольких?Я так понимаю тогда прийдётся для каждой составлять отдельный перечень комманд? Сейчас я это реализовал через парс xml по узлам в foreach .Впринципе все работает, однако по времени занимает в среднем 1.020 секунды.Хотелось бы по возможности оптимизировать время.