RSS (Podcast) De-/Serialisieren Namespace Problem

16/06/2009 - 19:48 von Thomas Huebner | Report spam
Hi NG,

Ich will mir einen kleinen Podcatcher schreiben (Programm zur Verwaltung
von Podcasts) Ein Podcast ist ja nichts weiter als ein RSS Feed. Zum
"parsen" des XML Files habe ich mir untenstehenden Code gebaut. Dieser
soll so universell wie möglich einen RSS/ PodCast in ein Objekt und
zurück verwandeln. Bei Podcast sind noch zusàtzliche Tags enthalten.
Diese beginnen mit <itunes:...>. Im Internet habe ich mir erlesen, das
dies auf einen zusàtzlichen Namespace hindeutet. Unter Angabe des
Namespaces bekomme ich diese Tag's auch deserialisiert. Leider sehen
diese dann beim serialisieren anders aus. Kann mir jemand mit
untenstehendem Code auf die Sprünge helfen? Ich glaube das Angeben des
Namespaces direkt am Tag ist auch unprofessionell und nicht universell
(da man den Namespace ja auch aus dem Header automatisch entnehmen
könnte) Auch wird der Namespace Header beim seriealisieren nicht in das
File geschrieben.
Kurzum - eigentlich soll die Funktion WriteRss() das selbe liefern was
die Funktion ReadRss() vorher eingelesen hat. Die Funktion ReadRss()
funktioniert ansich einwandfrei - falls jemand sowas schon immer mal
gesucht hat - gern geschehen ;-) (ich habe das ganze Internet vergeblich
durchsucht)
Getestet habe ich bisher immer mit dem Feed der beiden Urgesteine vom
CC2: http://www.cczwei.de/rss_issues.php

Hier der Code:

Namespace RSS

Public Class RssConverter
'''
''' <summary>Read a String to Rss object </summary>
''' <param name="text" >XML Source as string</param>
''' <returns>RSS object</returns>
'''
Public Shared Function ReadRss(ByVal text As String) As Rss
Dim ns As New XmlSerializerNamespaces
Dim xs As New XmlSerializer(GetType(Rss))
Dim tr As TextReader = New StringReader(text)
Return DirectCast(xs.Deserialize(tr), Rss)
End Function

'''
''' <summary>Write an RSS object to XML string</summary>
''' <param name="oRss" >RSS object</param>
''' <returns>XML Source as string</returns>
'''
Public Shared Function WriteRss(ByVal oRss As Rss) As String
Dim xs As New XmlSerializer(GetType(Rss))
Dim sb As New StringBuilder()
Dim tw As TextWriter = New StringWriter(sb)
xs.Serialize(tw, oRss)
Return tw.ToString
End Function
End Class

<XmlRoot("rss")> _
Public Class Rss
<XmlAttribute("version")> _
Public version As String

Public channel As RssChannel

Public Sub New()
channel = New RssChannel
End Sub
End Class

<XmlRoot("channel")> _
Public Class RssChannel
<XmlElement("title")> _
Public title As String

<XmlElement("link")> _
Public link As String

<XmlElement("description")> _
Public description As String

<XmlElement("language")> _
Public language As String

<XmlElement("generator")> _
Public generator As String

<XmlElement("copyright")> _
Public copyright As String

Public image As RssImage

<XmlElement("image", GetType(ItunesImage), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public itunes_image As ItunesImage

<XmlElement("ttl")> _
Public ttl As String

<XmlElement("category")> _
Public category As String

<XmlElement("lastBuildDate")> _
Public lastBuildDate As String

<XmlElement("pubDate")> _
Public pubDate As String

<XmlElement("managingEditor")> _
Public managingEditor As String

<XmlElement("webMaster")> _
Public webMaster As String

<XmlElement("summary", GetType(String), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public itunes_summary As String

<XmlElement("keywords", GetType(String), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public itunes_keywords As String

<XmlElement("author", GetType(String), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public itunes_author As String

<XmlElement("category", GetType(ItunesCategory), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public itunes_category As ItunesCategory

<XmlElement("owner", GetType(ItunesOwner), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public itunes_owner As ItunesOwner

<XmlElement("explicit", GetType(String), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public itunes_explicit As String

<XmlElement("item")> Public items As RssItem()

End Class

<XmlRoot("image")> _
Public Class RssImage
<XmlElement("url")> _
Public url As String

<XmlElement("title")> _
Public title As String

<XmlElement("link")> _
Public link As String
End Class

<XmlRoot("image")> _
Public Class ItunesImage
<XmlAttribute("url")> _
Public url As String
End Class

<XmlRoot("category")> _
Public Class ItunesCategory
<XmlAttribute("text")> _
Public text As String
End Class

<XmlRoot("owner")> _
Public Class ItunesOwner
<XmlElement("name", GetType(String), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public name As String

<XmlElement("email", GetType(String), _

[Namespace]:="http://www.itunes.com/dtds/podcast-1.0.dtd")> _
Public email As String
End Class

<XmlRoot("item")> _
Public Class RssItem
<XmlElement("title")> _
Public title As String

<XmlElement("pubDate")> _
Public pubDate As String

<XmlElement("description")> _
Public description As String

Public guid As RssGuid

Public enclosure As RssEnclosure
End Class

<XmlRoot("guid")> _
Public Class RssGuid
<XmlAttribute("isPermaLink")> _
Public isPermaLink As String
End Class

<XmlRoot("enclosure")> _
Public Class RssEnclosure
<XmlAttribute("url")> _
Public url As String

<XmlAttribute("length")> _
Public length As String

<XmlAttribute("type")> _
Public type As String
End Class
End Namespace
 

Lesen sie die antworten

#1 Thomas Hübner
17/06/2009 - 11:04 | Warnen spam
On 16 Jun., 19:48, Thomas Huebner wrote:
Hi NG,



OK - selbst rausgefunden:

<XmlRoot("rss")> _
Public Class Rss
<XmlNamespaceDeclarations()> _
Public namespaces As XmlSerializerNamespaces

<XmlAttribute("version")> _
Public version As String

Public channel As RssChannel
End Class

Die "<XmlNamespaceDeclarations()>" hat gefehlt

Gruß,
Thomas

Ähnliche fragen