6

XSLTファイルへの参照がすでに含まれているXMLファイルがあります。

参照されている変換ルールに従ってこのXMLファイルを変換し、適切なPDFファイルを作成できるようにすることを検討しています。

を介して実際の変換を実行できるようですがSystem.Xml.Xsl.XslCompiledTransform、変換を実行する前にXSLTを手動で関連付ける必要があります。

私が見たものに基づいて、XDocumentからXSLT参照を手動でプルする必要があります(以下の大まかな開始)。

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

ただし、XSLTはすでにXMLファイル自体で参照されているため、作業が多すぎると思います。変換を適用するためのより効率的な方法があります。

ありますか、それともこれは人がしなければならないことですか?

4

2 に答える 2

1

これを行うためのこれ以上の効率的な方法はありません。変換する前に、xmlからhrefをxsltに取得する必要があります。

ここで同様の質問:xml-stylesheetを使用したXslTransform

于 2011-12-02T09:52:45.283 に答える
0

これを支援するために、次のランタイム拡張を作成しました。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
于 2019-10-16T20:44:34.980 に答える