Gibt es eine effizientere Art und Weise zu verändern, ein XDocument, die bereits enthält eine Referenz auf ein XSLT?

StackOverflow https://stackoverflow.com/questions/8346715

Frage

Ich habe eine XML-Datei, enthält bereits eine Referenz auf ein XSLT-Datei.

Ich bin auf der Suche bei der Umwandlung dieser XML-Datei gemäß dem referenzierten Transformationsregeln, so dass ich dann erstellen Sie eine schöne PDF-Datei.

Es scheint, dass ich die eigentliche Transformation über System.Xml.Xsl.XslCompiledTransform, aber es erfordert, dass ich manuell zuordnen einer XSLT, bevor ich die transformieren.

Basierend auf dem, was ich gesehen habe, muss ich nun manuell ziehen Sie den XSLT-Referenz von der XDocument (rough start unten):

xmlDocument.Document.Nodes()
   .Where(n => n.NodeType == System.Xml.XmlNodeType.ProcessingInstruction)

Jedoch, seit die XSLT ist bereits verwiesen wird in der XML-Datei selbst, ich nehme an, ich mache zu viel Arbeit, und es gibt eine effizientere Möglichkeit für die Anwendung der Transformation.

Gibt es, oder ist es das, was man zu tun hat?

War es hilfreich?

Lösung

Es gibt keine effizientere Art und Weise zu tun.Haben Sie abrufen href xslt von xml, bevor transformieren.

Ähnliche Frage hier : XslTransform mit xml-stylesheet

Andere Tipps

Ich habe die folgende Laufzeit verlängert, um dabei zu helfen. Ich habe noch nicht mit einer Referenz XSL in der XML getestet, aber ansonsten sollte es gut sein.

<Runtime.CompilerServices.Extension()>
Public Function XslTransform(XDocument As XDocument, xslFile As String) As XDocument
    If String.IsNullOrWhiteSpace(xslFile) Then
        Try
            Dim ProcessingInstructions As IEnumerable(Of XElement) = From Node As XNode In XDocument.Nodes
                                                                     Where Node.NodeType = Xml.XmlNodeType.ProcessingInstruction
                                                                     Select Node
            xslFile = ProcessingInstructions.Value
        Catch ex As Exception
            ex.WriteToLog(EventLogEntryType.Warning)
        End Try
    End If
    XslTransform = New XDocument
    Try
        Dim XslCompiledTransform As New Xml.Xsl.XslCompiledTransform()
        XslCompiledTransform.Load(xslFile)
        Using XmlWriter As Xml.XmlWriter = XslTransform.CreateWriter
            Using XMLreader As Xml.XmlReader = XDocument.CreateReader()
                XslCompiledTransform.Transform(XMLreader, XmlWriter)
                XmlWriter.Close()
            End Using
        End Using

        Return XslTransform
    Catch ex As Exception
        ex.WriteToLog
        XslTransform = New XDocument()
        Throw New ArgumentException("XDocument failted to transform using " & xslFile, ex)
    End Try
End Function
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top