Изменение / редактирование тегов с помощью PHP - PullRequest
4 голосов
/ 30 марта 2011

Это мой первый вопрос здесь, поэтому, пожалуйста, потерпите меня - я прошу прощения, если я не написал правильно.

Мне удалось извлечь описание работы из файла XML, созданного нашей базой данных, однако, база данныхПрограммное обеспечение очень старое, и оно конвертирует определенные символы.

Моя проблема заключается в следующем: маркеры преобразуются во что-то вроде следующего:

"   Production of Monthly Management Accounts and variance analysis<BR>

Таким образом, "(знак кавычки) вводится там, где должна быть точка, и <BR>вводится для начала новой строки.

Мне было интересно, если кто-нибудь знает, как преобразовать знак кавычки и <BR> в <li> и </li> соответственно. Я искал несколько вариантов, как, preg_match и substr_replace однако ни один из них не дал желаемых результатов.

Очевидно, что текст между <li> и </li> будет меняться в зависимости от работы и т. Д.

В довершение всего, как только это сработает, мне нужно иметь возможность добавлять <ul> и </ul> вокруг элементов списка, но я предполагаю, что могу найти первый экземпляр <li> и заменить на <ul><li>а также последний экземпляр </li> и замените его на </li></ul>.

Извините, что пошли дальше. Надеюсь, я дал понять.

Редактировать: Большое спасибо за все быстрые ответы, я собираюсь дать имч завтра.Я застрял в этом большую часть дня, так что думаю, что пора отойти.

Просто дать немного дополнительной информации, если это поможет ...

Программное обеспечение базы данных о12 лет и поддержка для него вполне ограничена.Если мы хотим что-то сделать, это, как правило, стоит больших денег.Однако у него есть несколько вариантов экспорта данных: XML по какой-то причине сохранял форматирование HTML, поэтому я пошел по этому пути.

Все задания сначала были написаны в Word, а затем вставлены в поле «задание».«в базе данных, поэтому есть большая вероятность того, что код был неверно истолкован.

Я выполнил тестовую работу и убедился, что использовал маркеры в Word и скопировал - вставил ее в« поле задания »,там, где должны быть точки, появились кавычки, поэтому я предполагаю, что старое программное обеспечение не «понимает» пункты.

Я попробую все ваши отличные ответы и сообщу завтра!

Спасибо!

РЕДАКТИРОВАТЬ 2

Привет, ниже я вставил фактический вывод из представления источника.Я попытался использовать опцию preg_replace ниже, которая работает в одной строке, но, как вы можете видеть, вывод раздражает непрерывное размещение всего без разрывов строки.

An exciting opportunity has arisen to join an established company based in Luton for a high calibre Management Accountant. Reporting to the Finance Director, the Management Accountant will provide accurate and reliable management information and financial support to the business. <BR>Key Responsibilities:<BR>" Production of Monthly Management Accounts and variance analysis<BR>"    Preparation of Management Reports for Management Meetings.<BR>" Production of Monthly Forecasts and Annual Budgets using Excel.<BR>"    Decision support to the business<BR>"   Attending and presenting at meetings with business managers<BR>"    Assisting external auditors with their audit process at each year end<BR>"  Ad-hoc project work<BR>Experience:<BR>" Qualified accountant (ACA or CIMA) <BR>"    Strong communication skills - to communicate effectively with all levels of management<BR>" High level of personal motivation, focus and a commitment to quality<BR>"   Ability to adapt to the demands of a constantly changing business<BR>"  Ability to interact with people at all levels in a sensitive and effective way<BR>If you are interested in this role then please apply now.<BR>

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Допущения:

  • " начинает строку (кавычка, за которой следуют 3 пробела, уценка удаляет пробелы)
  • <BR> находится в самом конце строки
  • Больше не будет ни вариаций, ни разделенных линий

RegEx:

/^"   (.*)<BR>$/

PHP:

$replacedData = preg_replace( '/^"   (.*)<BR>$/', '<li>\1</li>', $data );

Как вам 'Мы сказали, что все содержимое смешано вместе, вы можете попробовать это регулярное выражение:

/"   (.*?)<BR>/

Хотя вы должны быть предупреждены, что он может подобрать неправильную кавычку, если в строках окажется «цитируемый» текст.

В качестве альтернативы, если вы знаете, что строки заканчиваются на <BR>" (3 пробела удаляются из-за уценки), вы можете использовать 3 замены, чтобы получить желаемый эффект:

$repData = preg_replace(
             array( '/<BR>"   /', '<BR>', '"   ' ),
             array( '</li><li>', '</li></ul>', '<ul><li>' ),
             $data );

Опять же,это может привести к неправильным элементам, особенно если в коде существует <BR>.

0 голосов
/ 30 марта 2011

Предполагая, что вы извлекли в переменную;для простоты демонстрации я просто установлю один:

$myVar = '"   Production of Monthly Management Accounts and variance analysis<BR>';

Как и в другом ответе, trim () - ваш друг, как и str_replace () или strip_tags () в зависимости от того, что конкретно вы хотите сделать и что еще можете иметь в своей базе данных.

Попробуйте это (при условии, что вы сохранили содержимое в $ myVarкак в моем примере).

$cleanedVar = strip_tags(trim($myVar,'" '));

Или вот это:

$cleanedVar = str_replace("<BR>","",trim($myVar,'" '));

Обе эти строки приведут к результату $ cleanedVar как

Производство ежемесячного управленческого учета и анализ отклонений

0 голосов
/ 30 марта 2011

Первым комментарием будет исправление поврежденной базы данных.

Кроме этого, почему существует форматирование в файле XML или в базе данных? Если это файл XML, просто удалите из элемента все, кроме текста описания задания, и пусть ваш PHP-скрипт выводит его красиво. Учитывая приведенный выше пример, обрежьте
с конечного конца, затем пропустите его через trim ('"'), чтобы очистить все заключенные в кавычки и пробелы.

Или это один из тех случаев, когда вы получаете XML из базы данных, и тот, кто написал эту часть, явно не понимал, для чего нужен XML?

Edit: Ааа. Это просто поразило меня. Может быть, вы имеете в виду, что описание работы представляет собой простой текстовый объект, с тем, что должно быть подпунктами, фактически все там зажато, отформатировано, как вы продемонстрировали. Если это так, у вас будет действительно трудное время, чтобы получить эту точную цифру, потому что есть шансы (при работе с неструктурированными данными) есть некоторые различия в форматировании. Я думаю, что вашей лучшей ставкой было бы регулярное выражение, чтобы вытащить весь текст между "и тегами BR, создать массив этого и вручную проверить некоторые образцы. О, и исправить базу данных.

...