|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
Хочу получить что-то вроде этого: Company Department Person PositionABC Sales Olga SecretutkaABC Sales Vasja ManagerABC Transportation Petja VodilaABC Transportation Victor Bombila Не хочу изобретать велосипед. У меня в схеме более 30К строк, до 6 уровней вложения, а количество полей порядка 1600. Кто-то делал такое? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2012, 23:56 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeНе хочу изобретать велосипед.От версии зависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 00:10 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
alexeyvgSandalTreeНе хочу изобретать велосипед.От версии зависит.2008R2 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 00:13 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTree, может быть пройтись по схеме и сформировать селект вида Код: sql 1. 2. 3. 4. 5.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 00:52 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeУ меня в схеме более 30К строк, до 6 уровней вложения, а количество полей порядка 1600. Так что в итоге нужно? 6 уровней вложения? - это company внутри company? department внутри department? person внутри person?) Или нужно просто вытащить содержимое нод person, и для них - значения company и department от parent (ancestor) нод? Остальные 1600-4 = 1596 полей к какому типу нод (company/department/person) относятся? В общем, опишите задачу точнее. Если просто персоны, и для них - компания/отдел, в которых они состоят (без упомянутых выше вложений) - то как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 03:57 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныSandalTreeУ меня в схеме более 30К строк, до 6 уровней вложения, а количество полей порядка 1600. Так что в итоге нужно? 6 уровней вложения? - это company внутри company? department внутри department? person внутри person?) Или нужно просто вытащить содержимое нод person, и для них - значения company и department от parent (ancestor) нод? Остальные 1600-4 = 1596 полей к какому типу нод (company/department/person) относятся? В общем, опишите задачу точнее. Если просто персоны, и для них - компания/отдел, в которых они состоят (без упомянутых выше вложений) - то как-то так: Мой кусок кода это просто пример для извращений. На самом деле всё гооораздо сложнее. Уровни вложения могут различаться в различных нодах и всё может повторяться или нет. Запостил-бы сюда xsd, но он больше 30000 строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 05:40 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeМой кусок кода это просто пример для извращений. На самом деле всё гооораздо сложнее. Уровни вложения могут различаться в различных нодах и всё может повторяться или нет. Запостил-бы сюда xsd, но он больше 30000 строк. Я тогда бы всё-таки применил к вашему XML XSLT. Для именно приведенного в стартовом постинге - что-то типа Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
и тогда на выходе получится такой нодесет: Код: xml 1. 2. 3. 4.
который уже можно будет легко залить с помощью того же openxml (по моим наблюдениям, он работает быстрее, чем XQuery). Ну, а для вашего случая "на самом деле" XSLT будет выглядеть как-то иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 06:48 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
старый способ, можно еще используя xPath но замороченей Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 07:02 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeУ меня в схеме более 30К ...XmlBulkLoad адназначна. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 12:07 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны [/src] и тогда на выходе получится такой нодесет: Код: xml 1. 2. 3. 4.
который уже можно будет легко залить с помощью того же openxml (по моим наблюдениям, он работает быстрее, чем XQuery). Ну, а для вашего случая "на самом деле" XSLT будет выглядеть как-то иначе.То что я привёл в виде примера, это не сама задача, а просто что-то маленькое, очень похожее на большое. Я не могу менять схему, она ко мне приходит готовая, а я уже должен её принять. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 16:00 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
Marugrстарый способ, можно еще используя xPath но замороченей Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Спасибо, очень красиво, но у меня проблема в том что одни и те-же названия могут применяться на одном и том-же уровне вложености: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Буду сейчас пробовать метод Alexanderа Karavaevа. Я видел в инете подобные примеры, но так не понимаю как он работает. Но если дело что мне надо, то тогда на нём и остановлюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 16:09 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
Не реагирует. Повторяю. Код: sql 1.
Одна команда и все данные записаны во все таблицы зразу. 8075805 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2012, 18:53 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
MniorНе реагирует. Повторяю. Код: sql 1.
Одна команда и все данные записаны во все таблицы зразу. 8075805 авторMsg 15281, Level 16, State 1, Procedure sp_OACreate, Line 1 SQL Server blocked access to procedure 'sys.sp_OACreate' of component 'Ole Automation Procedures' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ole Automation Procedures' by using sp_configure. For more information about enabling 'Ole Automation Procedures', see "Surface Area Configuration" in SQL Server Books Online. Msg 50000, Level 18, State 1, Procedure spXMLBulkLoad, Line 48 Error of execution method "SQLXMLBulkLoad.SQLXMLBulkload" в "sp_OACreate": Error Creation OLE object Как я понял, стандартные решения не катят, ибо даже после того как я успешно распарсил файл, он у меня вылил все данные в одну строку. И этого можно было ожидать, так как мне пришлось все поля сделать уникальными, иначе повторы имён выдавали ошибку. А так как уровни вложености и ноды у одинаковых имён различны, то сгруппировать по сторокам не представляется никакой возможности. Наверное можно что-то ручками сделать, но я-бы не старался. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2012, 22:59 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeMsg 15281, Level 16, State 1, Procedure sp_OACreate, Line 1Ага, а в первой же строке в процедуре английским по белому: Код: sql 1.
Специально для лентяев. SandalTreeКак я понял, стандартные решения не катятКатят. SandalTreeон у меня вылил все данные в одну строку.Неправильно отструктуировали. SandalTreeмне пришлось все поля сделать уникальными, иначе повторы имён выдавали ошибкуС какого перепугу. SandalTreeА так как уровни вложености и ноды у одинаковых имён различны, то сгруппировать по сторокам не представляется никакой возможности.Ну тогда оторвите руки тому кто делал формат данного малополезного документа. Чёта я по формату документа не вижу совершенно никаких дублей. Или там на полставки работают в разных департаментах? Ну дык укажите тока основной. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 12:10 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
MniorЧёта я по формату документа не вижу совершенно никаких дублей. Или там на полставки работают в разных департаментах? Ну дык укажите тока основной. Вот. Нарисуй мне результат запроса из этого ХМЛа. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 16:12 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeВот. Нарисуй мне результат запроса из этого ХМЛа.Какого навиг запроса? Запускаю: Код: sql 1.
В результате в 3х таблицах появились записи: dbo.Company:NameABCdbo.Department:CompanyNameABCSalesABCTransportationdbo.Person:DepartmentNamePositionSalesVasjaManagerSalesOlgaSecretutkaTransportationPetjaVodilaTransportationVictorBombila Ну в зависимости как вы расписали схему таблиц и XSD. Например вместо имён подставились автоинкрементные поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 19:18 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
MniorSandalTreeВот. Нарисуй мне результат запроса из этого ХМЛа.Какого навиг запроса? Запускаю: Код: sql 1.
В результате в 3х таблицах появились записи: dbo.Company:NameABCdbo.Department:CompanyNameABCSalesABCTransportationdbo.Person:DepartmentNamePositionSalesVasjaManagerSalesOlgaSecretutkaTransportationPetjaVodilaTransportationVictorBombila Ну в зависимости как вы расписали схему таблиц и XSD. Например вместо имён подставились автоинкрементные поля.Забыл про четвёртую - "основатели"... Но в том-то и фикус что в таком маленьком хмльчике уместились данные аж для четверых таблиц. А представь если там 1600 позиций... Брошу я это дело как неподъёмное. Нефиг на мне ездить. Пущай в джаве парсють, а мне только чистые данные кидают. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 07:09 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeА представь если там 1600 позиций... Брошу я это дело как неподъёмное.Слабак: Ищем в гугле "xsd generator online". Находим это Подставлям свой XML + Получаем XSD Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
+ Имеем схему таблиц Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
XSD with SQL Annotation Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
Код: sql 1.
+ Результат Код: sql 1. 2. 3. 4.
IDName1ABC IDNameCompany1Sales12Transportation1 IDNamePositionDepartment1VasjaManager12OlgaSecretutka13PetjaVodila24VictorBombila2 IDNameCompany1Kolja12Borja13Misha1+ ЗамечанияВ указанной на форуме процедуре отсутствует необходимая для данного случая (подстановка Identity) строка: Код: sql 1.
В моём случае задаётся 4-м параметром (по умолчанию 1) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2012, 11:04 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
Mnior, Ну конечно, слабак. В моём примере бизнес логика самая наипростейшая, вытянуть данные ничего не стоит. Оказалось что проблема вовсе не в выковыривании данных, а в понимании этой самой бизнес логики. Ты расковырял простенький XSD в 50 строк на четыре таблички. Сможешь так-же просто сделать это с файлом в 600 раз больше? Если сможешь, то тогда вопрос: у тебя есть Н1В? И кстати, процедуру твою я игнорировал, севрер ругается на вот эти системки: sys.sp_OACreate sys.sp_OASetProperty Говорит: Msg 15281, Level 16, State 1, Procedure sp_OASetProperty, Line 1 SQL Server blocked access to procedure 'sys.sp_OASetProperty' of component 'Ole Automation Procedures' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ole Automation Procedures' by using sp_configure. For more information about enabling 'Ole Automation Procedures', see "Surface Area Configuration" in SQL Server Books Online. А, вообще, снимаю шляпу перед твоей настойчивостью. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2012, 16:31 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTree, сейчас придет Mnior, скажет вам какую-нить гадость и будет прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2012, 17:02 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeВ моём примере бизнес логика самая наипростейшая, вытянуть данные ничего не стоит.Вообщето я понял. Возможно вы и правы (тады не понятно зачем вообще вы поднимали топик; но критичекое отношение к задаче - бальзам на душу), только не очень понятна ситуация в целом (мысли ваши не читаем) противоречива: - нужно данные вытянуть - структура неизвесна и предположительно заранее отсутствует Это как ? Куда данные выковыривать, и зачем?! SandalTreeСможешь так-же просто сделать это с файлом в 600 раз больше?Ты наверно имел ввиду не файл больше, а структура сложнее. Размер тут не причём. Если структура статично, то XSD делается один раз. Если структура в БД определена (имеются таблы) и она консестивна согласована с XML, то XSD генерируешь на основании этих метаданных. SandalTreeИ кстати, процедуру твою я игнорировал, севрер ругается на вот эти системки: sys.sp_OACreate sys.sp_OASetPropertyСлоупок?: 12398244 MniorАга, а в первой же строке в процедуре английским по белому: Код: sql 1.
Специально для лентяев. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2012, 19:01 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
MniorSandalTreeВ моём примере бизнес логика самая наипростейшая, вытянуть данные ничего не стоит.Вообщето я понял. Возможно вы и правы (тады не понятно зачем вообще вы поднимали топик; но критичекое отношение к задаче - бальзам на душу), только не очень понятна ситуация в целом (мысли ваши не читаем) противоречива: - нужно данные вытянуть - структура неизвесна и предположительно заранее отсутствует Это как ? Куда данные выковыривать, и зачем?! XSD есть, но он настолько велик что человеку "с улицы" не обьять необьятное. Вот хай-левел описаловка: http://support.ezclaim.com/ANSIRef/ MniorSandalTreeСможешь так-же просто сделать это с файлом в 600 раз больше?Ты наверно имел ввиду не файл больше, а структура сложнее. Размер тут не причём. Если структура статично, то XSD делается один раз. Если структура в БД определена (имеются таблы) и она консестивна согласована с XML, то XSD генерируешь на основании этих метаданных.XSD и структура таблиц увы не согласованы, т.е. нужно делать маппинг, а я не знаю бизнес логики ни источника ни приёмника. MniorSandalTreeИ кстати, процедуру твою я игнорировал, севрер ругается на вот эти системки: sys.sp_OACreate sys.sp_OASetPropertyСлоупок?: 12398244 MniorАга, а в первой же строке в процедуре английским по белому: Код: sql 1.
Специально для лентяев.Ну так я это понимаю, но у меня нет власти над серваком. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2012, 19:51 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeВот хай-левел описаловка: http://support.ezclaim.com/ANSIRef/ Это не описалово это муть, так, для вида. Уже подозрительно, но я взглянул поверхностно. SandalTreeнужно делать маппинг, а я не знаю бизнес логики ни источника ни приёмника.Так в этом и стоит задача. Только в этом! И вам нужно выбрать стратегию - через какой механизм и как это делать. Задача предельно чёткая и понятная, конкретная и частная. Берётся и исследуется мапинг. Глазками. Представив перед этим структуры (то УГ) в человеческих вид. Если он линейный/однозначный, что хватает в XSD тупо замапировать - то это халява. А вот если бизнес структуры предельно не связаны, то тут море кода. И где его делать надо решать, через полноценное исследование вариантов. Всё зависит от архитектуры взаимодействия: Потоковая обработка Event-ов или закачка Diff-ов. Где-то лучше нативным кодом, а где скриптами. Но в случае сложной связки обязательно ставится вопрос, а оно надо, а может мы не тем занимаемся и т.п. Застраховаться так сказать заведомо, от неминуемого фаталити. Т.к. это жжж не спроста. Mniorу меня нет власти над серваком.У меня тоже нет, прямой, и шо?! Есть требования, притом обоснованные. Или вы росли в глуши и люди у вас вызывают панический страх? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2012, 22:53 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
MniorSandalTreeВот хай-левел описаловка: http://support.ezclaim.com/ANSIRef/ Это не описалово это муть, так, для вида. Уже подозрительно, но я взглянул поверхностно. О! А мне это попытались всунуть вместо спецификации. MniorУ меня тоже нет, прямой, и шо?! Есть требования, притом обоснованные. Или вы росли в глуши и люди у вас вызывают панический страх?Ты местную бюрократию не знаешь. Я что крайний что-ли по инстанциям ходить. Инициатива очень строго наказуема. (по крайней мере, пока проект не горит) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2012, 15:57 |
|
Как вытащить данные из сложной и многоуровневой XML?
|
|||
---|---|---|---|
#18+
SandalTreeТы местную бюрократию не знаешь. Я что крайний что-ли по инстанциям ходить. Инициатива очень строго наказуема. (по крайней мере, пока проект не горит)Я знаю очень хорошо то что люди очень много болтают подобным образом и при этом ничего , никогда не пробовали сделать. Но самое прискорбное, что когда в очередной 100500 раз явно показываешь, что все нормально можно "пробить" за 2 секунды, то до мозгов это не доходит. Это диагноз, а не бюрократия. Да есть случаи, но "обход" очень часто находится. Как раз когда "не горит" это и делается. Кста, по запросу "837 XSD" что-то ловиться . Только сделайте качественный поиск и анализ. PS: Если бюрократия реально непробиваема (редкий случай). Найдите себе достойную работу. Можете с шефом это осудить. Не холопы же вы. Или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2012, 23:32 |
|
|
start [/forum/topic.php?fid=46&msg=37742226&tid=1684062]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
others: | 231ms |
total: | 390ms |
0 / 0 |