|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Задание такое: . Написать программу, проверяющую правильно ли в файле XML вложены и закрыты теги с ипользованием стека как вспомогательной системы. Программа проверяет только некоторые теги, их список записан в текстовом файле с синтаксисом, используемом во внешнем представлении объекта класса Properties. . txt файл с Properties такой: count=3 e1=YEAR e2=PRICE e3=CD . Подскажите в какую сторону двигаться, что можно тут попробовать, потому что не хватает значний языка для реализации такой задачи. Моя идея такая: создать два стека - левый, в который ложим открывающиеся теги, и правый для закрывающихся, а потом их сравниваем, при не правильно составленном XML документе получим предупреждение типа в таком то месте ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 09:42 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Предположительный код: Код: java 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. 54.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 11:36 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
utlikk, что-нибудь про XSD и валидацию XML слышали? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 13:00 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
utlikk Предположительный код: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Жесть какая. Понятно, что "предположительный", но все же жесть. Читать книжки про конечные автоматы и парсеры. Вроде что-то было у Вирта. Хотя книжка Вирта мне не очень понравилась, но других просто не помню. https://www.ozon.ru/context/detail/id/4803779/ AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 13:55 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
utlikk Моя идея такая: создать два стека.... Стека явно достаточно одного. При открытии тэга - push При закрытии тэга - pop А текущей элемент вообще в стек класть не нужно IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 13:57 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
utlikk, в этой задаче есть два смысла. 1) Ты изучаешь xml или алгоритмы со стеком и просто играешся. Тогда делай стеками или деками или очередями как хочешь. 2) Ты делаешь продуктовую систему которая должна - проверить что документ является well-formatted (правильно форматированным). Для этого его можно просто "перемотать через XMLStreamReader. - проверить что предыдущий пункт выполнен + еще и документ валиден. Это уже - соответсвие DTD (Document Type Definition) старое и архаичное или XSD (XML Schema definition). Схему ты должен либо описать сам либо взять готовую. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 14:11 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Если кто помнит книжки по построению парсеров и конечных автоматов, стоило бы автору топика ссылок накидать. IMHO. В любом случае пригодится. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 14:20 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Все зависит от глубины увлеченности человека. Мне сегодня тема проектирования парсеров настолько далека что я вообще не могу ее осилить. Просто в силу своего перфекционизма. Начинаю делать с Antlr/JavaCC и понимаю как глубоко закопался и потом плюю и решаю все конечным автоматом над потоком символов. Просто задачи обычно тупые попадаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 14:22 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
mayton Ну дык в примере кода даже не видна попытка побить на токены. Т.е. прочитать что нибудь про конечные автомы стоило бы (а в книжке Вирт'а AFAIK про конечные автоматы как-то бедно написано) mayton потом плюю и решаю все конечным автоматом над потоком символов AFAIK по общению с бывшими студентами, хорошо, если после обучения вообще такой термин помнят/знают ))) Но про использование данного термина в банальных задачах типа побить входной поток на токены - вместо sql.ru все же лучше почитать книжки. Выложенный пример кода с конструкцией: Код: java 1. 2. 3.
все же немного жесть ))) даже для "предположительный код" Что лично мне не нравится: 1) для чтения входного потока совершенно не нужно загонять его в память и максимум достаточно операции readChar 2) для дальнейшей проверки на тэги, входной поток из потока символов нужно превратить в поток токенов/тэгов. Т.е. нужно реализовать этот самый конечный автомат, который readChar превратит в readToken или readXmlTag IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 14:52 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Давай поможем бедняге. Чисто механический рефакторинг. Даже вот глубого не вникая в логику а просто выбрасывая ненужные действия. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:09 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
тогда уж вбрасывая нужные сначала - преобразование входного потока в поток токенов/тэгов ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:21 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Типо того Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:30 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
utlikk Написать программу, проверяющую правильно ли в файле XML вложены и закрыты теги с ипользованием стека как вспомогательной системы Код: java 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.
utlikk Программа проверяет только некоторые теги странное условие, если нужно - добавить зачем проверять только некоторые, когда проще проверить все - не понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:45 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
mayton Типо того Код: java 1. 2. 3. 4.
В топку. Тэг в XML имеет значительно более сложную структуру, что String ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:45 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Согласен. Ну так ты за беднягу все сделаешь. Лучше пускай бы он сам реализацию писал. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:49 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Например токен из входного потока <PRICE value="100" currency="USD"> явно не String Как минимум нам нужно знать: 1. Тип токена/тэга: 1.1. Открывающий тэг <PRICE...> 1.2. Закрывающий тэг </PRICE> 1.3. "самодостаточный" тэг <PRICE .../> 1.4. Комеентарии 1.5. Значения между тегами <tag>VALUE</tag> и прочий мусор возможно что-то еще. По хорошему нужно читать стандарт XML 1.3 - 1.5 для данной задачи в принципе не важны, но для парсера токенов будут различаться (например комментарии! вполне могут содержать < >) 2. Имя тэга, если это тег Т.е. <PRICE.... и <PRICE..../> и </PRICE => PRICE Для простоты, я бы хранил: tokenType - rawSource - сырые данные, весь входной поток данных включая < и > tagName - выделенное имя тэга вычлинять атрибуты в тэгах вряд ли требуется ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:55 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
AFAIK В токенайзере самое мутороное будет комментарии выделить. <!--Your comment--> одна эта конструкция 8 состояний конечного автомата даст ((( мне кажется больше, чем весь остальной токенайзер ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:59 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
mayton Согласен. Ну так ты за беднягу все сделаешь. Лучше пускай бы он сам реализацию писал. То, что почему-то не понимают "студенты желающие помоши" Если он принесет _нормальный_ токенайз преподавателю, то первый вопрос будет: что такое конечный автомат? после чего преподаватель с точностью 99.99% будет знать, что задание списано/заказано ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 16:09 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Полную спеку сложно поддержать. Вместе с блоками processing instructions и entities. Лучше забить пока на коментарии и сделать что-то простое и деревянное. А потом по необходимости допилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 16:09 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
mayton Вместе с блоками processing instructions и entities. +100500 Если есть ссылка на спеку, линкани в тему. лично я сложности не вижу. с комментариями тоже сложности нет, но больно монстрообразно получится. Есть еще открытый вопрос: а имя тэга по стандарту может содержать символы < и > ? кто читал рендеринг срачь в соседней ветке, вопрос должны понять ))) mayton Лучше забить пока на коментарии Облом ))) В приложенном топик стартере файле есть комментарии ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 16:18 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Не смотрел его файл. Надо спросить его. Афтор. Этот кейс покрывает все-все варианты? Или еще может какой-то синтасис прилететь? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 16:31 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Я боюсь читать про серверный рендеринг. У меня есть свой взгяд на проблему. Но поскольку я не юайщик то моё мнение носит сугубо теоретически и рекомендательный характер и вряд-ли будет интересно тем зубрам которые там бодаются. Пускай себе бодаются вусмерть.. Хотя по части инженерной графики я много чего знаю и могу рассказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 16:37 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Фигня получилась. Нужно спецификация по XML читать. Отделяет тэги от не тэгов, за тот же проход выделяет имя токена Отделение OPEN_TAG от CLOSE_TAG не сделано, пусть автор читает книжки и дорабатывает ))) Осталось добавить состояния парсера для выделения символа '/' перед именем токена и можно двигаться дальше ))) Почему фигня, т.к. в атрибутах тэга вполне могут встретиться символы / < > Текущий вариант лично меня бы не устроил. Но, возможно, для "студента" и пойдет. Код: java 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. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 17:49 |
|
Стек, теги XML
|
|||
---|---|---|---|
#18+
Можно ускорить этот парсер. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 18:15 |
|
|
start [/forum/topic.php?fid=59&msg=39941417&tid=2120856]: |
0ms |
get settings: |
26ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
454ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 869ms |
0 / 0 |