すでに XSLT への参照が含まれている XDocument を変換するより効率的な方法はありますか?

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

質問

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top