PDA

View Full Version : help on macro to replace html tags frontpage



ralle123
03-03-2011, 01:20 PM
trying to create a macro to replace HTML tags in frontpage 2000. Have the following code that works up to some point. I need to look for tags like <td &^&*^> and change them to <td> I also want to look for tags like
<P ALIGN="LEFT" DIR="LTR"> and take them out. Tags are not alwas the same so I would look for <p &^&*^*> and take it out. Any ideas?

Sub changetags()
lngViewMode = Application.ActivePageWindow.ViewMode
'Switch to Normal view.
Application.ActivePageWindow.ViewMode = fpPageViewNormal
Dim objElement As IHTMLElement
Dim strTagName As String
Dim strSearch As String
Dim strReplace As String
'Doctype
strPageHTML = ActiveDocument.DocumentHTML

'td
strReplace = "<td>"
strSearch = "<td" & "*" & " >"
strPageHTML = Replace(strPageHTML, strSearch, strReplace)

'F'ing Microsoft Tags
strSearch = "</p>"
strReplace = ""
strPageHTML = Replace(strPageHTML, strSearch, strReplace)

strSearch = "<P ALIGN=" & Chr(34) & "LEFT" & Chr(34) & " DIR=" & Chr(34) & "LTR" & Chr(34) & ">"
strReplace = ""
strPageHTML = Replace(strPageHTML, strSearch, strReplace)

ActiveDocument.DocumentHTML = strPageHTML

Application.ActivePageWindow.ViewMode = lngViewMode
End Sub

jrajul
11-05-2011, 07:05 PM
I am not an expert in Frontpage, but I have experience in using VBA to manipulate HTML. You will need to modify this code to made the resulting HTML useful to Frontpage (something with which I cannot help you).

This is how I would modify those tag names:

On Error GoTo error_handler
'The Microsoft HTML Object library must be active (Tools > References)

Dim webdoc As MSHTML.HTMLDocument
Set webdoc = webbrowser1.Document
'Or set this to your document.


'Variables you will use to refer to the HTML elements
Dim elem As MSHTML.HTMLBaseElement
Dim newE As MSHTML.HTMLBaseElement


Dim myStr As String


'First the controls that you just want to modify:
Dim myList As New Collection
'To this list add the tag names of all the types _
'of elemets that you want to modify (not delete!).
myList.Add "TD"
myList.Add "Etcetera"


For counter = 1 To myList.Count

For Each elem In webdoc.getElementsByTagName(myList(counter))

myStr = Replace(elem.outerHTML, elem.innerHTML, "") 'Returns the tag names without all the stuff between.

If InStr(1, myStr, " ") Then 'If there is a space in the tag name (indicating a lot of other stuff in the heading tag) then
'Add more restrictive criteria if you need to, so you do not delete to much.

Set newE = webdoc.createElement(elem.tagName) 'Create a new element of the same type


On Error Resume Next 'Temporarily turn off error handler.
newE.innerHTML = elem.innerHTML 'Transplant the guts from the other element
On Error GoTo error_handler 'Turn error handling back on.


webdoc.replaceChild newE, elem

'Replace the bad element with the new one created above

Set newE = Nothing 'refresh this variable

End If
Next elem


Next counter


'Now for the controls that must be deleted. Similar process as above
Dim myList2 As New Collection
myList2.Add "P"
myList2.Add "Et cetera" 'Add the tag names that you want to be deleted.

For counter = 1 To myList2.Count

For Each elem In webdoc.getElementsByTagName(myList2(counter))
myStr = Replace(elem.outerHTML, elem.innerHTML, "")

If your_criteria Then
elem.RemoveChild 'This function removes elements
End If
Next elem

Next counter

Set webdoc = Nothing
Set elem = Nothing
Set newE = Nothing
Exit Sub
error_handler:
'Error handler here

You will also need to make some modifications to suit your criteria for which tags need modifying.