заменить ключевое слово в HTML-строке - PullRequest
0 голосов
/ 13 января 2010

Я ищу способ заменить ключевые слова в html-строке переменной. На данный момент я использую следующий пример.

returnString = Replace(message, "[CustomerName]", customerName, CompareMethod.Text)

Вышеописанное будет работать нормально, если html-блок полностью распределен по ключевому слову.

например.

<b>[CustomerName]</b>

Однако, если форматирование ключевого слова разбито по всему слову, строка не найдена и, следовательно, не заменена.

, например

<b>[Customer</b>Name]

Форматирование строки вне моего контроля и не является надежным. Учитывая это, каков наилучший подход для поиска ключевого слова в строке html?

Ответы [ 3 ]

0 голосов
/ 13 января 2010

Используйте свойство text вместо innerHTML, если вы используете javascript для доступа к содержимому. Это должно удалить все теги из контента, вы вернете чистое текстовое представление имени клиента.

Например, если содержимое выглядит так:

<div id="name">
    <b>[Customer</b>Name]
</div>

Затем доступ к свойству text дает:

var name = document.getElementById("name").text;
// sets name to "[CustomerName]" without the tags

, который должен быть прост в обработке. Если вам нужно, выполните поиск regex сейчас.

Редактировать: Поскольку вы выполняете эту обработку на стороне сервера, рекурсивно обрабатываете XML и собираете текстовые элементы каждого узла. Так как я не большой на VB.Net, вот несколько псевдокодов:

getNodeText(node) {
    text = ""
    for each node.children as child {
        if child.type == TextNode {
            text += child.text
        }
        else {
            text += getNodeText(child);
        }
    }
    return text
}

myXml = xml.load(<html>);
print getNodeText(myXml);

А потом заменить или что там еще предстоит сделать!

0 голосов
/ 14 января 2010

Я нашел то, что я считаю решением этой проблемы. Ну, в моем сценарии это работает.

В html-ввод были внесены изменения для размещения каждого настраиваемого поля или ключевого слова в элементе div с установленным идентификатором. Я перебрал все элементы в строке html, используя mshtml, и установил для внутреннего текста правильное значение при обнаружении совпадения.

, например

Function ReplaceDetails(ByVal message As String, ByVal customerName As String) As String
    Dim returnString As String = String.Empty
    Dim doc As IHTMLDocument2 = New HTMLDocument
    doc.write(message)
    doc.close()
    For Each el As IHTMLElement In doc.body.all
        If (el.id = "Date") Then
            el.innerText = Now.ToShortDateString
        End If
        If (el.id = "CustomerName") Then
            el.innerText = customerName
        End If
    Next
    returnString = doc.body.innerHTML
    return returnString

Спасибо за все комментарии. Я рад, что у меня есть решение проблемы.

0 голосов
/ 13 января 2010

Попробуйте использовать выражение Regex. Создайте здесь свои выражения, я использовал это, и это хорошо работает.

http://regex -test.com / Validate / JavaScript / js_match

...