0

作成した XML ドキュメントに XSLT スタイルシートを添付したいと考えています。

XML ドキュメント コード

XML ドキュメントは、次のコードを使用して作成されます。

Private Sub CreateXML(ByVal ds1 As StatusProd.dsAssemblies, ByVal ReportName As String)
    ReportName = ReportName.Replace(".rdlc", "")
    Dim w As New XmlTextWriter(ReportName & ".xml", System.Text.Encoding.UTF8)

    w.WriteStartDocument(True) 'Start document
    w.Formatting = Formatting.Indented
    w.Indentation = 2

    w.WriteStartElement("Table") 'Start table
    For Each row As DataRow In ds1.Tables(0).Rows
        w.WriteStartElement("Assemblies")
        w.WriteStartElement("MachineNo")
        w.WriteString(row(0))
        w.WriteEndElement()

        w.WriteStartElement("Description")
        w.WriteString(row(1))
        w.WriteEndElement()

        w.WriteStartElement("Client")
        w.WriteString(row(2))
        w.WriteEndElement()

        w.WriteStartElement("DateTransfer")
        w.WriteString(row(4))
        w.WriteEndElement()
        w.WriteEndElement()
    Next

    w.WriteEndElement() 'End table
    w.WriteEndDocument() 'End document
    w.Close()
End Sub

XSLT XML への追加

XML ドキュメント クリエータの最後に次のコードを追加しようとしましたが、次のエラーが発生しました: 指定された場所にノードを挿入できませんでした

'Append XSL to XML
Dim doc As New XmlDocument
doc.Load("rptStatusProd.xml")
doc.PrependChild(doc.CreateProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'"))
doc.Save(w)

XML ドキュメントの最終結果

次のように、XML ドキュメントの 2 行目に処理命令を追加したいと考えています。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="Fetch.xslt"?>

私はこれを再現しようとしてきました:

http://www.w3schools.com/xsl/xsl_transformation.asp

4

3 に答える 3

2

試す

doc.DocumentElement.PrependChild(doc.CreateProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'"))

ドキュメント ルートの前に何かを追加することはできません。ただし、ドキュメント要素の前に何かを追加することはできます。

于 2013-05-28T15:54:43.773 に答える
2

先頭に追加しようとすると、ヘッダー ノードと衝突します。先頭に追加する代わりに、次を使用しますInsertAfter

XmlProcessingInstruction pi = doc.CreateProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'");
doc.InsertAfter(pi, doc.FirstChild);
于 2013-05-28T16:03:10.687 に答える
1

Loaddocの先頭に xml 宣言が追加され、xml 宣言の前に処理命令を配置できないと思われるため、prepend は doc では機能しません。

あなたが持っているかもしれない他の問題は、 rptStatusProd.xml が XmlTextWriter 出力に追加されることです。つまり、取得した後</Table><?xml...-これを呼び出すことができます:

w.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'")

于 2013-05-29T13:13:39.697 に答える