Как распарсить html
Например есть(естественно структура будет на много сложнее)
var xml = "<test> <tag> <t>\n</t> </tag> </test>"; я знаю например номер символа, например xml[10] и мне нужно найти его родительский тэг, как это правильно сделать? Потому что пустить через регуляки мне кажется плохой идеей или я ошибаюсь? В заголовке опечатка там должен быть xml (но суть особо не меняется) |
Взять либу :) А для запросов - xPath
|
jQuery умеет текст парсить
|
kobezzza, привет КЭП :)
Как узнать в каком я месте нахожусь что бы на уже спарсеном xml найти тот тэг? Все что у меня есть строка c xml (xml может быть большой) и номер с местом где я нахожусь в этой строке |
Цитата:
Цитата:
|
EmperioAf, я имел ввиду, как потом место в строке найти уже в распарсеном xml
|
простым поиском отфильтровывая всё что внутри < .... > число найденых в простом тексте и готовом доме будет равно не считая сидидата и коментариев
|
MallSerg, валидный атрибут <valid attribute=">"/>, не все так просто
|
MallSerg, почему то мне кажется плохой идеей пройтись регулярками по xml
|
А ты фильтруй теги ) никто не говорил что все будет просто
В том же jQuery есть готовые регулярки для фильтрации тегов |
MallSerg, один из вариантов)
Попробую, звучит быстрее, чем то что я придумал) |
Есть интересная идея, например есть xml, берем его обрезаем до того места что нужно и кидаем в DOMParser, а потом берем последний элемент в дереве.
var xml = '<!--?xmlversion="1.0"encoding="UTF-8"?--><breakfast_menu><food><name>BelgianWaffles</name><price>$5.95</price><description >OurfamousBelgianWaffleswithplentyofrealmaplesyrup</description><calories>650</calories></food><food><name>FrenchToast</name><price>$4.50</price><description>Thickslicesmadefromourhomemadesourdoughbread</description><calories>600</calories></food><food><name>HomestyleBreakfast</name><price>$6.95</price><description>Twoeggs,baconorsausage,toast,andourever-popularhashbrowns</description><calories>950</calories></food></breakfast_menu>'; var halfXML = "<breakfast_menu><food><name>BelgianWaffles</name><price>$5.95</price><description >OurfamousBelgianWaffleswithplentyofrealmaplesyrup"; //обзеранный xml p.parseFromString(halfXML, "application/xml") // потом пройтись по объекту и найти самый последний элемент |
cyber, не ожидал от тя такого вопроса еси честно))
var xml = "<test> <tag> <t>\n</t> </tag> </test>"; document = new DOMParser().parseFromString(xml, "text/xml"); а для селекторов применяешь https://developer.mozilla.org/en-US/..._in_JavaScript |
а, стоп, прочитал задачу, так это же легко, просто начинай от этого символа и иди назад считая открывающие теги) в чем трабл то? тебе код написать?
я прсото уже парсеров написал штук 10 за этот год, щас вот пишу парсер для coffee++ |
Цитата:
Просто не все так просто, мне не просто нужно получить элемент, а его родителя, я хотел получить сначала элемент добавить id вкинуть в DOMParser и по id найти его и взять родителя |
я не совсем понимаю что значит "получить"
|
блин чет у меня долго слишком молучается я написал парсер но когда понял что задача стоит получить в значении как дом элемнет я понял что это дольше чем я могу себе позволить, вот парсер не знаю поможет ли, прости но работать надо, дедлайны все дела
xml = '<test aa="22"> <tag> <t>\n</t> </tag> </test>' index = 40 code = xml.slice(0, index) tags = [] regExp = /<(\/)?(\w+)?.*?/img code.replace regExp, (match, isClose, name)-> tags.push {name, isClose: !!isClose} console.log tags console.log code return |
Ну а так да, самый лучший вариант просто поставить айдишник ему и получить по айди, если тебе надо получить именно в значении УЗНАТЬ КАКОЙ ЭЛЕМЕНТ В ДОКУМЕНТЕ ОПИСАН В СИМВОЛЕ ПО ТАКОМУ ТО ИНДЕКСУ И ПОЛУЧИТЬ ЕГО РОДИТЕЛЯ, то ты назвал самое очевидное решение, тогда почему его не сделаешь просто)?
тут даже парсеры писать не надо, ну вообще можно там рендж применить типа, берешь и выделение делаешь и смотришь что влезло в выделение, document.creageRange() но там гуглить надо про него, я не помню нифига) |
Mаxmaxmаximus,
вот что я написал http://jsfiddle.net/c9cws7au/3/ |
тут даже парсеры писать не надо, ну вообще можно там рендж применить типа, берешь и выделение делаешь и смотришь что влезло в выделение, document.creageRange() но там гуглить надо про него, я не помню нифига)
|
Mаxmaxmаximus, сенк за идею
|
Mаxmaxmаximus,
чет как то не очень работает http://jsfiddle.net/789692dq/1/ |
Mаxmaxmаximus, кстати, если хочешь по веселится присоединяйся, еще пару пунктов
по позиции нужно определить: - позиция находится внутри атрибута - внутри тела тэга <tag тут > - внутри текстовой части тэга <tag> тут </tag> - или так <tag> <t /> внутри этого </tag> Потому скину что получилось, если есть интересные идеи то слушаю) Сейчас делаю это с помощью конечного автомата |
Как отличить " \" " от ' " '
|
Цитата:
Не знай насколько это правильно но это мне ускоряит парсинг, но я это пометил как оптимизация. НО я все таки язык парсю, и у меня экранирование может какую то логику иметь и.т.п. а у тебя конкретная задача. |
Цитата:
парсишь в одну сторону, парсшь в другую, поулчаешь 2 массива. далее анализируешь эти теги, сколько открывающих было сколько закрывающий и определяешь в каком месте мы сейчас наодимся. п.с.ч то нужно анализимровать второй массив который ПОСЛЕ нужного символа идет я не уверен) |
Mаxmaxmаximus, сенк)
|
Mаxmaxmаximus,
Цитата:
|
парси теги, учитывая чт они могут быть незакрытыми
парси просто, выискивай скобочки <слово и не обязательно закрывающий тег, или вообще просто треугольные скобочки выискивай |
Цитата:
можно наследоваться и парсить любые языки и красиво их описывать да и работает молнеиносно. есть типа токены а есть лексемы, функциями мы описываем лексемы) а дальше используем как будто регулярку пишем. словами не обьяснить пока |
Mаxmaxmаximus, проблема в том что мне еще нужно проанализировать и не валидный xml )
|
Просто то что я написал это верхушка айсберга)
Такое чувство что они хотят что бы я с обычно редактора xml сделал IDE в браузере. Ребята обкурились походу) |
Лол стоп, если так стоит задача тогда ты определенно должен построить xml древо нормальное по тегам, и все такое. И чтобы древо имело метод "гет елемнет bay index"
у элементов будет типа innerXML и outerXML и ты такой к главному элементу пишешь root.getElementByCharIndex(12) и он анализирует свой outerXML ну и выдает элемнет то есть напиши банально парсер XML в древо и все. в чем трабл? а по скольку ты пишешь свой парсер ты можешь всякие ошибки в коде сразу детектить задача даже облегчается |
Mаxmaxmаximus, я уже написал уже, то что нужно, сейчас буду тестить.
Выложить не могу к сожеленью.. |
Цитата:
Может пригодиться, писал под свои нужды. |
kobezzza,спасибо, у тебя либы для запуска шатлов случайно нет?)
|
Цитата:
|
Цитата:
|
kobezzza, а у меня комментарий это такой токен)) и я их регуляркой паршу, строка тоже токин, число тоже. это сильно ускоряет парсинг.
|
Цитата:
|
Часовой пояс GMT +3, время: 22:04. |