Сохранять смещения файлов при разборе HTML с DOM? - PullRequest
3 голосов
/ 11 ноября 2010

Я хочу изменить атрибуты <img src=""> в не слишком искаженном HTML (посты WordPress). Я знаю, что могу пойти по простому пути и использовать регулярные выражения, но я боюсь, что люди в синих пушистых костюмах будут преследовать меня во сне .

Если я использую парсер DOM для чтения HTML-кода и изменения тегов <img>, боюсь, я не смогу восстановить пост в точности так, как он был (только с моей модификацией), потому что парсер DOM, вероятно, подойдет слишком много очистки и, возможно, удалить важные данные. Синтаксический анализатор SAX, вероятно, не может обрабатывать недопустимый XML, поэтому это также не будет работать.

Итак, есть ли промежуточный способ, где я могу использовать DOM-парсер, но тот, который знает, где начинается каждый элемент, так что я могу делать замены строк или что-то подобное оттуда? Я знаю, что некоторые узлы в дереве DOM не будут существовать в исходном документе (<b>Some <i>bizarre</b> formatting</i>, вероятно, вызовет это), но означает ли это, что это всегда невозможно? Я вижу, что в PHP 5.3 добавлена ​​функция DOMNode::getLineNo() , но я использую 5.2.x.

1 Ответ

0 голосов
/ 11 ноября 2010

Если DOM PHP будет писать "слишком чистые" результаты, вы сможете попробовать на основе строк SimpleHTMLDOM , будет ли это более мягким.как вы показываете, я бы никогда не стал полностью доверять парсеру делать это "правильно".Но попробуйте, может быть, он просто пропускает такие вещи.

Класс DOMNode библиотеки DOM имеет метод getLineNo().Я не совсем понимаю, как это работает, потому что это не дает смещения.Не уверен, поможет ли это вашему варианту использования.

...