Tworzenie mapy witryny XML z serwera SQL w ASP NET
O
Projektując nasz system zarządzania treścią, wiedzieliśmy, że plik mapy witryny będzie musiał zostać dołączony, aby umożliwić szybkie wykrywanie treści przez różne roboty, z których korzystają wyszukiwarki.
Ponieważ nasz system ma już za sobą bazę danych, oczywistym wyborem było wykorzystanie tych danych i dynamiczne tworzenie pliku.
System musiał być w stanie obsłużyć wiele stron, więc dla wbudowanej redundancji stworzyliśmy stronę indeksu map witryn, która następnie łączy się z mapami witryn.
XML Sitemap Index
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.claytabase.co.uk/sitemap.xml?Language=EN&Page=1</loc>
<lastmod>2019-07-17</lastmod>
</sitemap>
<sitemap>
<loc>https://www.claytabase.co.uk/sitemap.xml?Language=EN&Page=2</loc>
<lastmod>2019-07-17</lastmod>
</sitemap>
</sitemapindex>
XML Sitemap
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.claytabase.co.uk/</loc>
<lastmod>2013-12-13</lastmod>
<changefreq>monthly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://www.claytabase.co.uk/About-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us-Us</loc>
<lastmod>2013-12-09</lastmod>
<changefreq>monthly</changefreq>
<priority>1</priority>
</url>
</urlset>
Jak to wygenerować
Podzieliłem generowanie kodu na dwie klasy, aby ułatwić czytanie, ale można je połączyć, jeśli chcesz.
Generowanie jest powiązane ze zdarzeniem ładowania strony, ale jest dość proste.
- Ustaw typ treści odpowiedzi jako tekst/xml i kodowanie jako utf-8
- Utwórz edytor tekstu XML i zacznij pisać dokument
- Utwórz połączenie SQL, używając parametrów połączenia zapisanych w pliku konfiguracji sieci
- Pobierz wszystkie możliwe wartości z bazy danych i umieść je w zbiorze danych do odczytu
- Napisz pierwszy element (sitemapindex lub urlset), jest to wymagane jako część standardu, i ustaw schemat
- Rozpocznij pętlę przez zbiór danych
- Wpisz wymagany element (mapę witryny lub adres URL)
- Napisz wymagane atrybuty dla każdego elementu
- Oczyść i zamknij strumień
Sitemap Index
Imports System.Data
Imports System.Data.SqlClient
Imports System.Xml
Partial Class Generate_SitemapIndex
Inherits System.Web.UI.Page
Dim conStr As String = ConfigurationManager.ConnectionStrings("MySqlConnection").ConnectionString
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Clear()
Response.ContentType = "text/xml"
Response.Charset = "Utf-8"
Dim xtwFeed As XmlTextWriter = New XmlTextWriter(Response.OutputStream, Encoding.UTF8)
xtwFeed.WriteStartDocument()
Using con As New SqlConnection(conStr)
Dim com As New SqlCommand("SELECT {SitemapUrl},{SitemapModified} FROM {YourDatabase}", con)
Dim ds As New DataSet, da As New SqlDataAdapter(com)
con.Open()
da.Fill(ds)
xtwFeed.WriteStartElement("sitemapindex")
xtwFeed.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9")
Dim dr = ds.Tables(0).CreateDataReader
While dr.Read
xtwFeed.WriteStartElement("sitemap")
xtwFeed.WriteElementString("loc", dr.Item(0).ToString) 'OR full URL from your database!
xtwFeed.WriteElementString("lastmod", dr.Item(1).ToString) 'ISO1806 format date.
xtwFeed.WriteEndElement()
End While
xtwFeed.WriteEndElement()
End Using
xtwFeed.WriteEndDocument()
xtwFeed.Flush()
xtwFeed.Close()
Response.End()
End Sub
End Class
Sitemap
Imports System.Data
Imports System.Data.SqlClient
Imports System.Xml
Partial Class Generate_Sitemap
Inherits System.Web.UI.Page
Dim conStr As String = ConfigurationManager.ConnectionStrings("MySqlConnection").ConnectionString
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Clear()
Response.ContentType = "text/xml"
Response.Charset = "Utf-8"
Dim xtwFeed As XmlTextWriter = New XmlTextWriter(Response.OutputStream, Encoding.UTF8)
xtwFeed.WriteStartDocument()
Using con As New SqlConnection(conStr)
Dim com As New SqlCommand("SELECT {PageUrl},{PageModified},{PageChangeFreq},{PagePriority} FROM {YourDatabase}", con)
Dim ds As New DataSet, da As New SqlDataAdapter(com)
con.Open()
da.Fill(ds)
xtwFeed.WriteStartElement("urlset")
xtwFeed.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9")
Dim dr = ds.Tables(0).CreateDataReader
While dr.Read
xtwFeed.WriteStartElement("url")
xtwFeed.WriteElementString("loc", dr.Item(0).ToString) 'full URL from your database!
xtwFeed.WriteElementString("lastmod", dr.Item(1).ToString) 'ISO1806 format date.
xtwFeed.WriteElementString("changefreq", dr.Item(2).ToString) 'daily, weekly, monthly etc
xtwFeed.WriteElementString("priority", dr.Item(3).ToString) 0.0 to 1.0
xtwFeed.WriteEndElement()
End While
xtwFeed.WriteEndElement()
End Using
xtwFeed.WriteEndDocument()
xtwFeed.Flush()
xtwFeed.Close()
Response.End()
End Sub
End Class
Projekt strony internetowej przez Claytabase
Jest to sekcja kodu, która została zmodyfikowana z kodu systemu zarządzania treścią Ousia, jednego z najszybszych i najbardziej zoptymalizowanych systemów na rynku, będącego częścią naszych usług projektowania stron internetowych.