|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
IntroductionThe Search Engine module will search an entire page also dynamic pages for matching keyword(s) or a phrase and will count how many times the keyword(s) or phrase are found on the page, and display the results with the highest matches first. The module will search all files with the extensions that you can easily place the extension name into the web.config file where indicated. Files or folders that you don't want searched can be placed in the web.config where indicated, so these files and folders are not searched. Also now you can choose the encoding of your choice. This updated article contains tips to globalize and enhance the code. . Note: It is best suited for small sites. Also you can modify this code to crawl pages internally by using regular expressions. For larger site you will need to write to XML file once periodically and then read from XML file. I have offered tips at the end of the section to do so. I have also included a demo project that reads and writes to XML. BackgroundSite Search Engine helps a user to trace the pages of his interest. When I was working on an ASP.NET project, I had to add the site search module. I had one in ASP but not in .NET. Hence the birth of this site search engine. My first version was just a single web form and I had not exploited the full features of the object oriented .NET language. In my spare time, I reworked my code to make the maximum use of the object oriented language. For this article, I further enhanced my design on the basis of the experience and the good practices suggested by different authors. Mr. Song Tao from Beijing, China approached me with queries how to convert the module to Chinese. With his help I enhanced the code to support other languages. Also a few users encountered article errors when the SiteSearch.aspx was placed in the root. I modified the code to rectify the error.
Source Code OverviewThe structure of the Site Search Engine is as follows:
ClassesThe ability to define a class and create instances of classes is one of the most important capabilities of any object-oriented language. In the coming section, we see the classes that we have used in the search module.
SiteSearch.aspxWeb Forms are one of the new, exciting features in Microsoft's .NET initiative. SiteSearch.aspx is a web form which is also the start page for the search module. A Web Forms page consists of a page (ASPX file) and a code behind file (.aspx.cs file or .aspx.vb file). Our web form consists of SiteSearch.aspx and SiteSearch.aspx.vb. I will be treating them simultaneously touching on the main elements of the web form. ASP.NET is an event-driven programming environment. We will see some event handlers and methods in the coming section. Page_LoadThe server controls are loaded on the Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If IsNothing(sSite) Then
sSite = Session("Site")
End If
End Sub
srchbtn_ClickThe search button event is fired when the search button is clicked. Here we
put the code to change control settings or display text on the page. Here we
check if the search contains text and then call the '*********************************************************
'
' srchbtn_Click event
'
' Add code to this event.
'
'**********************************************************
Private Sub srchbtn_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles srchbtn.Click
Dim strSearchWords As String
'If there is no words entered by the user to search for
'then don't carryout the file search routine
pnlSearchResults.Visible = False
strSearchWords = Trim(Request.Params("search"))
If Not strSearchWords.Equals("") Then
Searchs.Site.ApplicationPath = String.Format("http://{0}{1}",
Request.ServerVariables("HTTP_HOST"), Request.ApplicationPath)
sSite = SearchSite(strSearchWords)
Session("Site") = sSite
dgrdPages.CurrentPageIndex = 0
DisplayContent()
End If
End Sub
DisplayContent
'*********************************************************************
'
' DisplayContent method
'
' The data is bound to the respective fields.
'
'*********************************************************************
Private Sub DisplayContent()
If Not IsNothing(sSite.PageDataset) Then
pnlSearchResults.Visible = True
lblSearchWords.Text = sSite.SearchWords
If ViewState("SortExpression") Is Nothing Then
ViewState("SortExpression") = "MatchCount Desc"
End If
BindDataGrid(ViewState("SortExpression"))
lblTotalFiles.Text = sSite.TotalFilesSearched
lblFilesFound.Text = sSite.TotalFilesFound
End If
End Sub
SearchThe main call to the search takes place in this method.
'************************************************************
'
' SearchSite method
'
' The sSite.PageDataset is used to populate the datagrid.
'
'************************************************************
Private Function SearchSite(ByVal strSearch_
As String) As Searchs.UserSearch
Dim srchSite As Searchs.UserSearch
srchSite = New Searchs.UserSearch()
'Read in all the search words into one variable
srchSite.SearchWords = strSearch
If Phrase.Checked Then
srchSite.SearchCriteria = Searchs.SearchCriteria.Phrase
ElseIf AllWords.Checked Then
srchSite.SearchCriteria = Searchs.SearchCriteria.AllWords
ElseIf AnyWords.Checked Then
srchSite.SearchCriteria = Searchs.SearchCriteria.AnyWords
End If
srchSite.Search(Server.MapPath("./"))
Return srchSite
End Function
DataGridThe DatabindingData binding is the process of retrieving data from a source and dynamically
associating it to a property of a visual element. Because a
The content of a '************************************************************
'
' BindDataGrid method
'
' The sSite.PageDataset is used to populate the datagrid.
'
'************************************************************
Private Sub BindDataGrid(ByVal strSortField As String)
Dim dvwPages As DataView
dvwPages = sSite.PageDataset.Tables("Pages").DefaultView
dvwPages.Sort = strSortField
dgrdPages.DataSource = dvwPages
dgrdPages.DataBind()
End Sub
The control has the ability to automatically generate columns that are based
on the structure of the data source. Auto-generation is the default behavior of
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<%# DisplayTitle(Container.DataItem( "Title" ), _
Container.DataItem( "Path" )) %>
<br>
<%# Container.DataItem( "Description" ) %>
<br>
<span class="Path">
<%# String.Format("{0} - {1}kb", DisplayPath( _
Container.DataItem( "Path" )) , _
Container.DataItem( "Size" ))%>
</span>
<br>
<br>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
'****************************************
'
' DisplayTitle method
'
' Display title of searched pages
'
'****************************************
Protected Function DisplayTitle(ByVal Title _
As String, ByVal Path As String) As String
Return String.Format("<A href="{1}">{0}</A>", Title, Path)
End Function
'****************************************
'
' DisplayPath method
'
' Path of the file is returned
'
'****************************************
Protected Function DisplayPath(ByVal Path As String) As String
Return String.Format("{0}{1}/{2}", _
Request.ServerVariables("HTTP_HOST"), _
Request.ApplicationPath, Path)
End Function
PaginationUnlike the The pager bar is an interesting and complimentary feature offered by the
'*****************************************************************
'
' dgrdPages_PageIndexChanged event
'
' The CurrentPageIndex is Assigned the page index value.
' The datagrid is then populated using the BindDataGrid function.
'
'*****************************************************************
Protected Sub dgrdPages_PageIndexChanged(ByVal s As Object, _
ByVal e As DataGridPageChangedEventArgs) _
Handles dgrdPages.PageIndexChanged
dgrdPages.CurrentPageIndex = e.NewPageIndex
DisplayContent()
End Sub
You control the pager bar by using the <PagerStyle CssClass="GridPager" Mode="NumericPages"></PagerStyle>
SortingThe
Note: In my pages, I have disabled the header but if the header is shown, you
can use it to sort the '*****************************************************************
'
' dgrdAdditionalItems_SortCommand event
'
' The ViewState( "SortExpression" ) is Assigned
' the sort expression value.
' The datagrid is then populated using the BindDataGrid function.
'
'*****************************************************************
Protected Sub dgrdPages_SortCommand(ByVal s As Object, _
ByVal e As DataGridSortCommandEventArgs) _
Handles dgrdPages.SortCommand
ViewState("SortExpression") = e.SortExpression
DisplayContent()
End Sub
Page.vb
The role of the The
'***************************************************
'
' Size Property
'
' Assign and retrieve size of the file
'
'***********************************************
Public Property Size() As Decimal
Get
Return m_size
End Get
Set(ByVal Value As Decimal)
m_size = Value
End Set
End Property
'***************************************************
'
' Path Property
'
' Assign and retrieve path of the file
'
'***********************************************
Public Property Path() As String
Get
Return m_path
End Get
Set(ByVal Value As String)
m_path = Value
End Set
End Property
'***********************************************
'
' Title Property
'
'Assign and retrieve title of the file
'
'***********************************************
Public Property Title() As String
Get
Return m_title
End Get
Set(ByVal Value As String)
m_title = Value
End Set
End Property
'***********************************************
'
' Keywords Property
'
' Assign and retrieve Keywords
' (meta tags) of the file
'
'***********************************************
Public Property Keywords() As String
Get
Return m_keywords
End Get
Set(ByVal Value As String)
m_keywords = Value
End Set
End Property
'***********************************************
'
' Description Property
'
' Assign and retrieve description
' (meta tags) of the file
'
'***********************************************
Public Property Description() As String
Get
Return m_description
End Get
Set(ByVal Value As String)
m_description = Value
End Set
End Property
'***********************************************
'
' Contents Property
'
' Assign and retrieve contents of the file
'
'***********************************************
Public Property Contents() As String
Get
Return m_contents
End Get
Set(ByVal Value As String)
m_contents = Value
End Set
End Property
'***********************************************
'
' Contents Property
'
' Assign and retrieve MatchCount of the file
'
'***********************************************
Public Property MatchCount() As Integer
Get
Return m_matchcount
End Get
Set(ByVal Value As Integer)
m_matchcount = Value
End Set
End Property
The CheckFileInfo MethodIt is a public method which checks if title, description and content exists. If the text for title is empty then it assigns the default value "No Title". If the text for description is empty then it either assigns the contents of the file or default value "There is no description available for this page". '*************************************************
'
' CheckFileInfo method
'
' Subroutine to the check the file contains
' title and decription
'
'*************************************************
Public Sub CheckFileInfo()
'If the page contains no title then Page Title
' variable the appropriate message to display
If IsNothing(m_title) Or m_title.Trim().Equals("") Then
m_title = "No Title"
End If
'If the page contains no title then Page Description
'variable the appropriate message to display
If IsNothing(m_description) Or _
m_description.Trim().Equals("") Then
If IsNothing(m_contents) Or _
m_contents.Trim().Equals("") Then
m_description = _
"There is no description available for this page"
Else
If m_contents.Length > 200 Then
m_description = m_contents.Substring(0, 200)
Else
m_description = m_contents
End If
End If
End If
End Sub
Search method
'*******************************************
'
' Search method
'
' Subroutine to the search file
'
'*******************************************
Public Sub Search(ByVal strSearchWords As String, _
ByVal SrchCriteria As SearchCriteria)
'If the user has choosen to search by phrase
If SrchCriteria = SearchCriteria.Phrase Then
SearchPhrase(strSearchWords)
'Else the search is either by all or any words
Else
SearchWords(strSearchWords, SrchCriteria)
End If
End Sub
'******************************************************
'
' SearchPhrase method
'
' Subroutine to the search file
'
'******************************************************
Private Sub SearchPhrase(ByVal strSearchWords As String)
Dim mtches As MatchCollection
mtches = SearchPattern(strSearchWords)
'Check to see if the phrase has been found
If mtches.Count > 0 Then
'Get the number of times the phrase is matched
m_matchcount = mtches.Count
End If
End Sub
'**************************************************
'
' SearchWords method
'
' Subroutine to the search file
'
'**************************************************
Private Sub SearchWords(ByVal strSearchWords As String, _
ByVal SrchCriteria As SearchCriteria)
Dim intSearchLoopCounter As Integer
Dim sarySearchWord As String()
'Array to hold the words to be searched for
Dim mtches As MatchCollection
'Split each word to be searched up and place in an array
sarySearchWord = Split(Trim(strSearchWords), " ")
'Loop round to search for each word to be searched
For intSearchLoopCounter = 0 To UBound(sarySearchWord)
'Set the pattern to search for
mtches = SearchPattern(sarySearchWord(_
intSearchLoopCounter))
If SrchCriteria = SearchCriteria.AnyWords Then
m_matchcount = m_matchcount + mtches.Count
ElseIf SrchCriteria = SearchCriteria.AllWords Then
'Check to see if any of the words have been found
If mtches.Count > 0 Then
'Get the number of times the search word is matched
If m_matchcount = 0 Or (m_matchcount > 0 _
And m_matchcount > mtches.Count) Then
m_matchcount = mtches.Count
End If
Else
'If the search word is not found then set the
'search found variable back to false as one of
'the words has not been found
m_matchcount = 0
Exit Sub
End If
End If
Next
End Sub
The escaped character \b is a special case. In a regular expression, \b
denotes a word boundary (between \w and \W characters) except within a []
character class, where \b refers to the backspace character. In a replacement
pattern, \b always denotes a backspace. '****************************************************
'
' SearchPattern method
'
' Subroutine to the search file
'
'****************************************************
Private Function SearchPattern( _
ByVal strSearchWord As String) As MatchCollection
Dim regexp As Regex
Dim strPattern
'Set the pattern to search for
regexp = New Regex("", RegexOptions.IgnoreCase)
'Search the file for the phrase
If Searchs.Site.Encoding.Equals("utf-8") Then
strPattern = "\b{0}\b"
Else
strPattern = "{0}"
End If
Return regexp.Matches(m_contents, String.Format(strPattern, _
strSearchWord), RegexOptions.IgnoreCase)
End Function
UserSearch.vb
It contains the following properties:
'**********************************************************
'
' SearchCriteria Property
'
' Assign and retrieve SearchCriteria of the site
'
'**********************************************************
Public Property SearchCriteria() As Searchs.SearchCriteria
Get
Return m_searchCriteria
End Get
Set(ByVal Value As Searchs.SearchCriteria)
m_searchCriteria = Value
End Set
End Property
'**********************************************************
'
' SearchWords Property
'
'Assign and retrieve SearchWords of the site
'
'**********************************************************
Public Property SearchWords() As String
Get
Return m_searchWords
End Get
Set(ByVal Value As String)
m_searchWords = Value
End Set
End Property
'**********************************************************
'
' TotalFilesSearched Property
'
' Retrieve TotalFilesSearched of the site
'
'**********************************************************
Public ReadOnly Property TotalFilesSearched() As Integer
Get
Return m_totalFilesSearched
End Get
End Property
'**********************************************************
'
' TotalFilesFound Property
'
' Retrieve TotalFilesFound of the site
'
'**********************************************************
Public ReadOnly Property TotalFilesFound() As Integer
Get
Return m_totalFilesFound
End Get
End Property
'**********************************************************
'
' PageDataset Shared Property
'
' Retrieve data of the entire site of the site
'
'**********************************************************
Public ReadOnly Property PageDataset() As DataSet
Get
Return m_dstPages
End Get
End Property
Search MethodActual processing of the search begins here. '********************************************
'
' Search Method
'
' Search the entire site
'
'********************************************
Public Function Search(ByVal targetDirectory As String) As DataSet
'If the site is in English then use the server HTML encode method
If Searchs.Site.EnglishLanguage = True Then
'Replace any HTML tags with the HTML codes
'for the same characters (stops people entering HTML tags)
m_searchWords = m_page.Server.HtmlEncode(m_searchWords)
'If the site is not english just change the script tags
Else
'Just replace the script tag <> with HTML encoded < and >
m_searchWords = Replace(m_searchWords, "<", "<", 1, -1, 1)
m_searchWords = Replace(m_searchWords, ">", ">", 1, -1, 1)
End If
If m_dstPages Is Nothing Then
m_dstPages = Searchs.PagesDataset.Create()
End If
ProcessDirectory(targetDirectory)
Return m_dstPages
End Function
ProcessDirectory MethodThe '*********************************************
'
' ProcessDirectory Method
'
' Files in the directories are searched
'
'********************************************
Private Sub ProcessDirectory(ByVal targetDirectory As String)
Dim fileEntries As String()
Dim subdirectoryEntries As String()
Dim filePath As String
Dim subdirectory As String
fileEntries = Directory.GetFiles(targetDirectory)
' Process the list of files found in the directory
For Each filePath In fileEntries
m_totalFilesSearched += 1
ProcessFile(filePath)
Next filePath
subdirectoryEntries = Directory.GetDirectories(targetDirectory)
' Recurse into subdirectories of this directory
For Each subdirectory In subdirectoryEntries
'Check to make sure the folder about to be searched
'is not a barred folder if it is then don't search
If Not InStr(1, Searchs.Site.BarredFolders, _
Path.GetFileName(subdirectory), vbTextCompare) > 0 Then
'Call the search sub prcedure to search the web site
ProcessDirectory(subdirectory)
End If
Next subdirectory
End Sub 'ProcessDirectory
ProcessFile MethodThe '*******************************************************
'
' ProcessFile Method
'
' Real logic for processing found files would go here.
'
'*******************************************************
Private Sub ProcessFile(ByVal FPath As String)
Dim srchFile As Searchs.Page
srchFile = GetInfo(FPath)
If Not IsNothing(srchFile) Then
srchFile.Search(m_searchWords, m_searchCriteria)
If srchFile.MatchCount > 0 Then
m_totalFilesFound += 1
'Response.Write(srchFile.Contents)
srchFile.CheckFileInfo()
Searchs.PagesDataset.StoreFile(m_dstPages, srchFile)
End If
End If
End Sub 'ProcessFile
GetInfo MethodThe '*****************************************************************
'
' GetInfo Method
'
' File data is picked in this method
'
'*****************************************************************
Private Function GetInfo(ByVal FPath As String) As Searchs.Page
Dim fileInform As New FileInfo(FPath)
Dim sr As StreamReader
Dim srchFile As New Searchs.Page()
Dim strBldFile As New StringBuilder()
Dim strFileURL As String 'Holds the path to the file on the site
'Check the file extension to make sure the file
'is of the extension type to be searched
If InStr(1, Searchs.Site.FilesTypesToSearch, _
fileInform.Extension, vbTextCompare) > 0 Then
'm_page.Trace.Warn("File ext.", fileInform.Extension)
'Check to make sure the file about to be searched
'is not a barred file if it is don't search the file
If Not InStr(1, Searchs.Site.BarredFiles, _
Path.GetFileName(FPath), vbTextCompare) > 0 Then
'm_page.Trace.Warn("File", FPath)
If Not File.Exists(FPath) Then
'm_page.Trace.Warn("Error", _
'String.Format("{0} does not exist.", FPath))
'Add throw excetion here
'
'
Return Nothing
End If
Searchs.FileContent.GetFileInfo(FPath, srchFile)
Return srchFile
End If
End If
Return Nothing
End Function
FileContent.vb
GetFileInfo MethodHere the chunk of the data in the page is retrieved. The file content is
either read from the source if the files are static using the
'**********************************************
'
' GetFileInfo Method
'
' File data is picked in this method
'
'**********************************************
Public Shared Sub GetFileInfo(ByVal FPath As String, _
ByVal srchFile As Searchs.Page)
Dim fileInform As New FileInfo(FPath)
Dim strBldFile As New StringBuilder()
Dim fileSize As Decimal = fileInform.Length \ 1024
srchFile.Size = fileSize
GetFilePath(FPath, srchFile)
If InStr(1, Searchs.Site.DynamicFilesTypesToSearch, _
fileInform.Extension, vbTextCompare) > 0 Then
m_page.Trace.Warn("Path", String.Format("{0}/{1}", "", _
srchFile.Path))
GetDynamicFileContent(srchFile)
Else
GetStaticFileContent(FPath, srchFile)
End If
If Not srchFile.Contents.Equals("") Then
srchFile.Contents = sr.ReadToEnd()
'Read in the title of the file
srchFile.Title = GetMetaContent(srchFile.Contents,_
"<title>", "</title>")
'm_page.Trace.Warn("Page Title", strPageTitle)
'Read in the description meta tag of the file
srchFile.Description = GetMetaContent(srchFile.Contents,_
"<meta name=""description"" content=""", ",""">")
'm_page.Trace.Warn("Page Desc", strPageDescription)
'Read in the keywords of the file
srchFile.Keywords = GetMetaContent(srchFile.Contents,_
"<meta name=""keywords"" content=""", ",""">")
'm_page.Trace.Warn("Page Keywords", strPageKeywords)
srchFile.Contents = _
Searchs.CleanHtml.Clean(srchFile.Contents)
srchFile.Contents = _
strBldFile.AppendFormat("{0} {1} {2} {3}", _
srchFile.Contents, srchFile.Description, _
srchFile.Keywords, srchFile.Title).ToString.Trim()
'm_page.Trace.Warn("File Info", strBldFile.ToString)
End If
End Sub
'******************************************************
'
' GetStaticFileContent Method
'
' File Content is picked in this method
'
'*******************************************************
Private Shared Sub GetStaticFileContent(_
ByVal FPath As String, ByVal srchFile As Searchs.Page)
Dim sr As StreamReader
If Searchs.Site.Encoding.Equals("utf-8") Then
sr = File.OpenText(FPath)
Else
sr = New StreamReader(FPath, _
Encoding.GetEncoding(Searchs.Site.Encoding))
End If
Try
srchFile.Contents = sr.ReadToEnd()
sr.Close()
Catch ex As Exception
m_page.Trace.Warn("Error", ex.Message)
srchFile.Contents = ex.Message
End Try
End Sub
GetDynamicFileContent
'*********************************************************************
'
' GetDynamicFileContent Method
'
' File Content is picked in this method
'
'*********************************************************************
Private Shared Sub GetDynamicFileContent(ByVal srchFile As Searchs.Page)
Dim wcMicrosoft As System.Net.WebClient
If Searchs.Site.Encoding.Equals("utf-8") Then
GetDynamicFileContentUTF(srchFile)
Else
GetDynamicFileContentOther(srchFile)
End If
End Sub
Applications that target the common language runtime use encoding to map character representations from the native character scheme (Unicode) to other schemes. Applications use decoding to map characters from nonnative schemes (non-Unicode) to the native scheme. The System.Text Namespace provides classes that allow you to encode and decode characters.
'****************************************************************
'
' GetDynamicFileContentOther Method
'
' File Content is picked in this method
' according to the encoding provided
'
'****************************************************************
Private Shared Sub GetDynamicFileContentOther( _
ByVal srchFile As Searchs.Page)
Dim wcMicrosoft As System.Net.WebClient
Dim fileEncoding As System.Text.Encoding
Try
fileEncoding = System.Text.Encoding.GetEncoding(_
Searchs.Site.Encoding)
srchFile.Contents = fileEncoding.GetString( _
wcMicrosoft.DownloadData(String.Format("{0}/{1}", _
Searchs.Site.ApplicationPath, srchFile.Path)))
Catch ex As System.Net.WebException
m_page.Trace.Warn("Error", ex.Message)
srchFile.Contents = ex.Message
Catch ex As System.Exception
m_page.Trace.Warn("Error", ex.Message)
srchFile.Contents = ex.Message
End Try
End Sub
'*********************************************************************
'
' GetDynamicFileContentUTF Method
'
' File Content is picked in this method according to the utf-8 encoding
'
'*********************************************************************
Private Shared Sub GetDynamicFileContentUTF( _
ByVal srchFile As Searchs.Page)
Dim wcMicrosoft As System.Net.WebClient
Dim objUTF8Encoding As UTF8Encoding
Try
wcMicrosoft = New System.Net.WebClient()
objUTF8Encoding = New UTF8Encoding()
srchFile.Contents = objUTF8Encoding.GetString( _
wcMicrosoft.DownloadData(String.Format("{0}/{1}", _
Searchs.Site.ApplicationPath, srchFile.Path)))
Catch ex As System.Net.WebException
m_page.Trace.Warn("Error", ex.Message)
srchFile.Contents = ex.Message
Catch ex As System.Exception
m_page.Trace.Warn("Error", ex.Message)
srchFile.Contents = ex.Message
End Try
End Sub
GetFilePath MethodThe '*****************************************
'
' GetFilePath Method
'
' File path is modfied to be displayed
' as hyperlink in this method
'
'*****************************************
Private Shared Sub GetFilePath(ByVal strFileURL As String,_
ByVal srchFile As Searchs.Page)
'Turn the server path to the file into a URL path to the file
strFileURL = Replace(strFileURL, m_page.Server.MapPath("./"), "")
'Replace the NT backslash with the internet
'forward slash in the URL to the file
strFileURL = Replace(strFileURL, "\", "/")
'Encode the file name and path into the URL code method
strFileURL = m_page.Server.UrlEncode(strFileURL)
'Just incase it's encoded any backslashes
strFileURL = Replace(strFileURL.Trim(), _
"%2f", "/", vbTextCompare)
srchFile.Path = strFileURL
m_page.Trace.Warn("Url", srchFile.Path)
End Sub
GetMetaContent Method
'************************************************
'
' GetMetaContent Method
'
' Metacontent is stripped in this method
'
'************************************************
Private Shared Function GetMetaContent(ByVal strFile As String, _
ByVal strMetaStart As String, ByVal strMetaEnd As String) As String
'List the text between the title tags:
Dim regexp As Regex
Dim strMeta As String
Dim strPattern As String
Dim strInPattern As String
'If no description or keywords are found then you may be
'using http-equiv= instead of name= in your meta tags
If InStr(1, LCase(strFile), strMetaStart, 1) = 0 _
And InStr(strMetaStart, "name=") Then
'Swap name= for http-equiv=
strMetaStart = Replace(strMetaStart, "name=", "http-equiv=")
End If
'Build Pattern
strInPattern = "((.|\n)*?)"
strPattern = String.Format("{0}{1}{2}", _
strMetaStart, strInPattern, strMetaEnd)
regexp = New Regex(strPattern, RegexOptions.IgnoreCase)
'Match Pattern
strMeta = regexp.Match(strFile).ToString
'Build Pattern
strInPattern = "(.*?)"
strPattern = String.Format("{0}{1}{2}", _
strMetaStart, strInPattern, strMetaEnd)
'Get Pattern content
strMeta = regexp.Replace(strMeta, strPattern,_
"$1", RegexOptions.IgnoreCase)
Return strMeta
End Function
PagesDataset.vb
This class is used to create and build the
'*******************************************************
'
' Create Method - Shared method
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||