Gibt es eine effizientere Art und Weise zu verändern, ein XDocument, die bereits enthält eine Referenz auf ein XSLT?
-
27-10-2019 - |
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?
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