すでに XSLT への参照が含まれている XDocument を変換するより効率的な方法はありますか?
-
27-10-2019 - |
質問
XSLT ファイルへの参照がすでに含まれている XML ファイルがあります。
参照された変換ルールに従ってこの XML ファイルを変換して、適切な PDF ファイルを作成できるようにすることを検討しています。
実際の変換は次の方法で実行できるようです System.Xml.Xsl.XslCompiledTransform
, ただし、変換を実行する前に XSLT を手動で関連付ける必要があります。
これまで見てきたことに基づいて、XDocument から XSLT 参照を手動で取得する必要があります (以下の大まかな開始点)。
xmlDocument.Document.Nodes()
.Where(n => n.NodeType == System.Xml.XmlNodeType.ProcessingInstruction)
ただし、XSLT は すでに XML ファイル自体内で参照されているため、作業が多すぎると思われます。変換を適用するより効率的な方法があります。
あるのか、それともこれがやらなければならないことなのか?
解決
これ以上に効率的な方法はありません。変換する前に、xml から href を xslt に取得する必要があります。
同様の質問がここにあります: XML スタイルシートを使用した XslTransform
他のヒント
これを支援するために、次のランタイム拡張を書きました。 XMLで参照XSLを使用してテストしていませんが、それ以外の場合は良いはずです。
<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
所属していません StackOverflow