Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Trasformazione XML usando XSL e problemi di encoding.

    Ciao.

    Mi trovo col seguente problema: dato un tracciato XML, trasformarlo applicando un foglio di stile XSLT e ottenere un nuovo XML.

    In realtà non si tratta di nulla di particolare, se non per il fatto che ho un problema di encoding. Partendo da un XML UTF-8 ottengo un XML risultante UTF-16.
    Ho anche capito perchè, e si capisce bene dal codice VB.NET (in una pagina ASP.NET) che ho usato:

    codice:
    dim xmlDoc as XmlDocument
    xmlDoc = new XmlDocument
    xmlDoc.load("c:\fileDiPartenza.xml")
    Dim nav As XPath.XPathNavigator
    nav = xmlDoc.CreateNavigator
    Dim sw As New System.IO.StringWriter
    Dim xslt As New XslTransform
    xslt.Load("c:\foglioTrasformatore.xsl")
    xslt.Transform(nav, Nothing, sw, Nothing)
    Dim pHelp As String
    pHelp = sw.ToString()
    Response.Write(pHelp.ToString())
    Il problema sta nell'uso dello StringWriter che utilizza una codifica UTF-16.
    Quindi nel momento in cui memorizzo nello StringWriter il risultato dell'elaborazione, anche se nel foglio XSLT ho messo come encoding di output UTF-8, questa direttiva viene ignorata.

    Come posso risolvere? Qualche idea?


    Grazie.
    Fedrok
    Corsi di Shiatsu a Brescia? Corso di Shiatsu a Brescia?
    ____________________________________
    Visto che la luce viaggia piu' veloce del suono, sara' per questo che molte persone appaiono brillanti finchè non le senti parlare?

  2. #2

    ...

    Fedrok
    Corsi di Shiatsu a Brescia? Corso di Shiatsu a Brescia?
    ____________________________________
    Visto che la luce viaggia piu' veloce del suono, sara' per questo che molte persone appaiono brillanti finchè non le senti parlare?

  3. #3

    Soluzione

    Allego qui sotto la soluzione al problema.
    Le due funzioni in overload, che riporto sotto, rispettano l'encoding specificato nel file XSLT.

    Public Function getStringTransformed(ByVal stringXML As String, ByVal stringXSL As String) As String
    Dim xml As New XmlDocument
    Dim xsl As New XmlDocument
    xsl.LoadXml(stringXML)
    xml.LoadXml(stringXSL)
    Return getStringTransformed(xml, xsl)
    End Function

    Public Function getStringTransformed(ByVal xml As XmlDocument, ByVal xsl As XmlDocument) As String

    Dim rXML As XmlTextReader = New XmlTextReader(xml.DocumentElement.OuterXml, XmlNodeType.Document, Nothing)
    Dim xpDoc As XPath.XPathDocument = New XPath.XPathDocument(rXML, XmlSpace.Preserve)

    Dim navXSL As XPath.XPathNavigator
    navXSL = xsl.CreateNavigator
    Dim xslt As New XslTransform
    xslt.Load(navXSL, Nothing, Nothing)
    Dim ms As New MemoryStream

    xslt.Transform(xpDoc, Nothing, ms, Nothing)
    ms.Flush()
    ms.Position = 0
    Dim sr As New StreamReader(ms)
    Dim p As String
    p = sr.ReadToEnd
    sr.Close()
    sr = Nothing
    xslt = Nothing
    ms.Close()
    ms = Nothing
    navXSL = Nothing
    xpDoc = Nothing
    rXML = Nothing
    Return p
    End Function
    Fedrok
    Corsi di Shiatsu a Brescia? Corso di Shiatsu a Brescia?
    ____________________________________
    Visto che la luce viaggia piu' veloce del suono, sara' per questo che molte persone appaiono brillanti finchè non le senti parlare?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.