-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Заменить один тег на другой html
Здравствуйте. Мне нужно в html коде заменить тег
HTML код:
<span style="font-weight: bold;">текст</span>
(их может быть несколько) на Проблема в том, что тегов span в документе очень много: у меня не получается найти закрывающий тег (так как они очень часто влаживаются один в другой). Помогите, пожалуйста.
|
Цитата:
Цитата Pavluha
нужно в html коде заменить тег »
|
Только тег, или всё его содержимое?
Если первое, тогда так:
Код:
$vTest = 'some code <span style="font-weight: bold;">span content <span style="">included span content other span content</span> some code'</span>
$sRet = StringRegExpReplace($vTest, '<span style="[^"]*">|</span>', '')
ConsoleWrite("Result: " & $sRet & @LF)
Если второе, тогда так:
Код:
$vTest = 'some code <span style="font-weight: bold;">span content <span style="">included span content other span content</span> some code'</span>
$sRet = StringRegExpReplace($vTest, '<span style="[^"]*">.*</span>', '')
ConsoleWrite("Result: " & $sRet & @LF)
|
Creat0R, мне нужно сменить название тега, а не убрать его.
То есть, мне нужно превратить это:
HTML код:
some <span style="font-weight: bold;">text and <span style="font-weight: italic;">more</span></span>
в:
HTML код:
some <b>text and <span style="font-weight: italic;">more</span></b>
|
Цитата:
Цитата Pavluha
мне нужно сменить название тега, а не убрать его »
|
Пока получилось только с циклом:
Код:
$vTest = 'some code <span style="font-weight: bold;">span content <span style="">included span content other span content</span> some code</span>'
While 1
$vTest = StringRegExpReplace($vTest, '<span style="[^"]*">(.*(?=</span>))</span>', '<b>\1</b>')
If @extended = 0 Then ExitLoop
WEnd
ConsoleWrite("Result: " & $vTest & @LF)
|
а можно другие варианты, а то этот не работает правильно (только что заметил)
|
Цитата:
Цитата Pavluha
можно другие варианты, а то этот не работает правильно »
|
Код с которым нужно работать, в студию.
|
Может так :?
Код:
$sText='<title>Заменить один тег на другой html</title>' & @CRLF & _
'some <span style="font-weight: bold;">text and <span style="font-weight: italic;">more</span></span>' & @CRLF & _
'some <span style="font-weight: bold;">====text1==== and <span style="font-weight: italic;">more</span></span>' & @CRLF & _
'some <span style="font-weight: bold;">*****text2**** and <span style="font-weight: italic;">more</span></span>'
$sNewTag="b"
$sPatern = '<(?:span.*?bold;")>(.+)<(?:/span)>'
$sResult = StringRegExpReplace( $sText, $sPatern,"<" & $sNewTag & ">$1</" & $sNewTag & ">" )
MsgBox(4096, ' Test Result', $sResult)
|
Оно не заменяет вложенные теги.
|
Creat0R, gregaz, я придумал алгоритм, по которому можно 100% найти закрывающий тег, он есть конечно :), но не могу сам написать. Примерно так:
Код:
$iPos = StringInStr ($sString, '<span style="font-weight: bold;">')
$iTags = 0
While $iTags<>-1
(тут идём дальше по файлу. если видим закрывающийся
тег, то $iTags уменьшаем на 1, а если открывающийся, то
увеличиваем на 1. Цикл закончится, когда найдём
правильный закрывающийся тег. Надо найти его позицию.)
WEnd
единственное, что надо учесть при написании -- могут быть одинарные теги.
Цитата:
Цитата Creat0R
Код с которым нужно работать, в студию. »
|
прога будет работать с обыкновенным хтмл кодом, она будет копировать с нужного сайта новость или что-то другое, заменять теги и выдавать мне результат. Единственное, что у меня не получается -- заменять теги.
|
Цитата:
Цитата Pavluha
я придумал алгоритм, по которому можно 100% найти закрывающий тег »
|
Зачем что-то придумывать?
Я дал рабочий вариант, если нет хотя бы куска кода который показывает обратно, то не имеет смысла дальше что либо делать.
Цитата:
Цитата Pavluha
прога будет работать с обыкновенным хтмл кодом, она будет копировать с нужного сайта новость или что-то другое »
|
Пример такого кода можно увидеть?
Ты написал что вариант работает неправильно, покажи с каким кодом.
|
Цитата:
Цитата Creat0R
Зачем что-то придумывать?
Я дал рабочий вариант, если нет хотя бы куска кода который показывает обратно, то не имеет смысла дальше что либо делать. »
|
вы увидите насколько он рабочий, если
HTML код:
$vTest = 'some code <span style="align: center;"><span style="font-weight: bold;"><span style="font-weight: italic;">included span content other span content</span></span></span>'
приблизительно такой код был на сайте.
Creat0R, доделайте мой код, пожалуйста, и тема будет решена.
|
Цитата:
Цитата Pavluha
вы увидите насколько он рабочий, если »
|
Ну так тут совсем другие условия, тут есть align, также тут не кавычек у параметров.
Вот рабочий вариант:
Код:
$vTest = 'some code <span align=center><span style="font-weight: bold;"><span style="font-weight: italic;">included span content other span content</span></span></span>'
While 1
$vTest = StringRegExpReplace($vTest, '<span style="?[^">]*"?>(.*?)</span>', '<b>\1</b>')
If @extended = 0 Then ExitLoop
WEnd
ConsoleWrite($vTest & @LF)
|
Creat0R, вы не понимаете. мне нужно заменить только тег <span style="font-weight: bold;"> , а остальные не трогать.
Вообще, доделайте мой скрипт, и всё будет норм. Мне будет достаточно для моих манипуляций с тегами.
|
Цитата:
Цитата Pavluha
вы не понимаете. мне нужно заменить только тег <span style="font-weight: bold;"> , а остальные не трогать. »
|
А вы бы объясняли лучше, тогда может и пойму.
Поправил код.
Цитата:
Цитата Pavluha
доделайте мой скрипт, и всё будет норм. »
|
Там нечего доделывать, т.к код неверный, как в принципе и сам алгоритм. Для таких задач используются рег. выражения.
|
Pavluha, это Вы не понимаете, что работа regexp'ов критично зависит от исходного материала. Надо сразу озвучивать условия техзадания целиком и полностью, а не в час по чайной ложке.
|
Creat0R, Iska, что тут не понятного? просто найти тег <span style="font-weight: bold;">text</span> и заменить его на <b>text</b>.
ТОЛЬКО тег <span style="font-weight: bold;"> , а не все спаны
|
Creat0R, что вам стоит доделать мой алгоритм. Мне и его будет достаточно.
|
А что непонятного в том что я пишу?
Мой последний код не работает?
Цитата:
Цитата Pavluha
что вам стоит доделать мой алгоритм »
|
Зачем новый велосипед делать, есть уже инструменты для этой задачи.
|
Creat0R, читайте полностью что я пишу: ваш скрипт все теги спан, у которых есть параметр стиль, заменяет на б. А мне нужно, чтобы заменяло только этот тег со стилем font-weight: bold; . Неужнли не понятно?
|
Цитата:
Цитата Pavluha
ваш скрипт все теги спан, у которых есть параметр стиль, заменяет на б. А мне нужно, чтобы заменяло только этот тег со стилем font-weight: bold; »
|
Нужно было так и написать в первом сообщении.
Код:
$vTest = 'some code <span align=center><span style="font-weight: bold;"><span style="font-weight: italic;">included span content other span content</span></span></span>'
$iOccurrense = -1
While 1
$iStartPos = StringInStr($vTest, '<span ', 0, $iOccurrense)
If Not $iStartPos Then ExitLoop
$iClosePos = StringInStr($vTest, '</span>', 0, -$iOccurrense, $iStartPos - 1)
$sTmp = StringMid($vTest, $iStartPos, $iClosePos - $iStartPos + 7)
$vTest = StringReplace($vTest, $sTmp, StringRegExpReplace($sTmp, '<span style="font-weight: bold;">(.*)</span>', '<b>\1</b>', 1), 1)
$iOccurrense -= 1
WEnd
ConsoleWrite($vTest & @LF)
|
Цитата:
Цитата Creat0R
Нужно было так и написать в первом сообщении. »
|
а что, я не так написал
а за код спасибо, правда уже сам написал)
|
Время: 00:23.
© OSzone.net 2001-