helycopternicht: Дам вам небольшую вводную. Надеюсь, что вы знакомы с JSON? По сути абстракций они очень похожи, только есть нюансы, которые их различают - в json нельзя задать атрибуты как в XML, в JSON нет встроенного метода, чтобы определить родителя у потомка, а в XML есть.
Очень важно понимать зачем нужно XSLT. С помощью XSLT можно сделать преобразование XML->другой формат (не любой, иногда только с потерей данных)->(CSV, XML, text и др).
Реализация XSLT бывает ущербной. XSLT это своеобразный JavaScript для XML. Например, в браузерах XSLT очень слабый, даже replace текста выглядит настолько чудовищно, что не верится, но если делать XSLT преобразования в Java, то там XSLT можно расширить своими функциями, которых изначально нет в XSLT. Т.е. вы можете зарегистрировать в XSLT функцию Java и вызывать её, например, для того же replace текста.
Так что вы удачно стали интересоваться XML в контексте Java. В этом случае возможностей больше.
Никита Полевой: Я сейчас перерыл профайлер и не нашёл того, что обещал, но КЛЯНУСЬ я это видел! ))) Но год назад. Может они уже исправили эту ситуацию? потому что у меня из-за этого были дикие утечки памяти! Я потом стал применять не суммирование строк, а контакенацию строк в массиве. ["str1", "str2","str3", ..., "strN"].concat()
Если найду инфу - обязательно отпишусь!
Nurshat: Да. Вам нужно почитать, как разбирается xml. В XML нет просто текста. Есть набор "текстовых" потомков, даже если они не обрамлены тегами, но перемешаны с обычными тегами. Т.е. в вашем случае в массиве children будут div, text, div, text, img, text. HTML частный случай XML, поэтому надо пользоваться методами разбора XML. plaintext - это просто "выдирание" только текста из всех потомков, фактически просто удаление всего, что находится в угловых скобках. Остальное вам и предъявляется как plaintext.
Александр: Сорри, наверно невнимательно прочитал. Я тоже сначал подумал, что речь о макросах типа С++, но потом увидел лисп и меня переклинило на автокадовский лисп, потом мысли улетели на оффис и... вот результат. Плохой ассоциативный ряд. Но про макросы из вопросов я тоже в курсе. ))) Просто ещё один способ влияния на исходный код программы. Что-то вроде программирования языка программирования.
mak_ufo: >> все объекты xhr одинаковые
Не xhr одинаковые, а это один объект. Его свойство status меняется во время загрузки данных и генерирует событие onreadystatechange (В комменте Почему ответ от сервера приходит 3 раза? об этом и было написано) . А onload срабатывает всего один раз.
mak_ufo: Стоп. Пропустил ваш ответ "при событии xhr.onload = () => {} на клиенте всё выводится один раз, кстати". А где выдаётся три раза? Или вы уже решили проблему?
mak_ufo: Эээ. fiddler, конечно, не работает. А проксирование - работает. Если под рукой есть машина с windows - поставьте на ней fiddler и откройте на ней удалённый доступ:
После этого пропишите в вашем браузере в linux прокси на windows-комп и порт 8888 (внешний порт для доступа к fiddler). Профит. Проверьте количество запросов ещё раз.
mak_ufo: А какие ответы выводятся? onreadystatechange меняется несколько раз за время получения ответа. Моё воображение может нарисовать два сообщения "на зарегистрирован" и одно "зарегистрирован". Вам нужно учитывать только status===200. Остальные - только для отлова ошибок или ожидания. И они не считаются.
Очень важно понимать зачем нужно XSLT. С помощью XSLT можно сделать преобразование XML->другой формат (не любой, иногда только с потерей данных)->(CSV, XML, text и др).
Реализация XSLT бывает ущербной. XSLT это своеобразный JavaScript для XML. Например, в браузерах XSLT очень слабый, даже replace текста выглядит настолько чудовищно, что не верится, но если делать XSLT преобразования в Java, то там XSLT можно расширить своими функциями, которых изначально нет в XSLT. Т.е. вы можете зарегистрировать в XSLT функцию Java и вызывать её, например, для того же replace текста.
Так что вы удачно стали интересоваться XML в контексте Java. В этом случае возможностей больше.