XML Daten lassen sich sehr einfach per ReadXML in ein Dataset laden. Dabei treten aber oft Formatprobleme auf. Das konkrete Problem zeige ich anhand eines RSS importers.
Ich verwende ein XSTL File und eine entsprechende Transformation um aus den RSS passende Daten zu generieren
(Details in einem anderen Artikel). Mein konkretes Problem ist das Datum. Dies wird per default als String übernommen und lässt sich dann nicht mehr weiterverarbeiten für sortieren oder filtern. Die gute Nachricht ist, das man im XSLT File Verweise auf .NET Funktionen machen kann. Hier heisst diese Funktion ParseDate.
Zunächst wird im XSLT File ein Namensraum deklariert der hier Utils genannt wird.
< xsl:transform version="1.0"
xmlns:xsl ="http://www.w3.org/1999/XSL/Transform"
xmlns:utils="urn:utils" |
Im Namensraum Utils wird die Funktion ParseDate mit dem Inhalt des Elements PubDate als Parameter aufgerufen. Die XSL Funktion value-of erlaubt den Zugriff auf pubDate. Dann wird wieder ein Element PubDate, diesesmal mit dem neuen Datumsformat erzeugt.
<pubDate>
< xsl:value-of select="utils:ParseDate(pubDate)" />
</ pubDate> |
In der Klasse Utils ( bei .NET 2.0 in app_code) wird die Funktion ParseDate gecoded.
Public Function ParseDate(ByVal Datum As String) As Date
Return (DateTime.Parse(Datum).ToUniversalTime())
End Function |
Nun muss noch über ein XSLTArgumentList Objekt die Verbindung zur Utils Klasse hergestellt werden. Dabei wird der Funktion AddExtensionObject der Namensraum und die erzeugte Instanz übergeben. Beim Transform werden die Argumente mitgegeben.
Dim xslArg As Xsl.XsltArgumentList = New Xsl.XsltArgumentList()
xslArg.AddExtensionObject( "urn:utils", New Utils())
XslDoc.Transform(XmlDoc, xslArg, writer) | Ich war wirklich begeistert vom Ergebnis. Mein Gridview zeigt nun die Daten richtig an und sortiert auch richtig nach Datum. XSL und XML können wirklich sehr nützliche Hilfen sein.
|