簡體   English   中英

如何在XSLT上生成doctype XML文件

[英]How to generate doctype XML file on XSLT

我需要借助XSLT FILE將XML格式轉換為doctype XML格式。 源文件是常規XML。

根據我的目標文件,我需要獲得:

<!DOCTYPE Pip3B3ShipmentStatusNotification SYSTEM "3B3_MS_R01_00_ShipmentStatusNotification.dtd">

我的xslt代碼如下

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output doctype-system="3B3_MS_R01_00_ShipmentStatusNotification.dtd" encoding="UTF-8"  indent="yes"/>
    <xsl:template match="/">
        <Pip3B3ShipmentStatusNotification>
            <fromRole>
                <PartnerRoleDescription>
                    <ContactInformation>
                        <contactName>
                        </contactName>
                    </ContactInformation>
                </PartnerRoleDescription>
            </fromRole>
        </Pip3B3ShipmentStatusNotification>
    </xsl:template>
</xsl:transform>

我的宏在下面給出,請檢查宏,讓我知道是否有任何問題

Sub dummy()

    Call Transform("C:\Users\nypaul\Desktop\yves\out\source.xml", "C:\Users\nypaul\Desktop\yves\out\template\template.xsl", "C:\Users\nypaul\Desktop\yves\out\output.xml")

    MsgBox "ok"

End Sub

Function Transform(sourceFile, styleSheetFile, resultFile) As Boolean

    Dim Source As Object
    Dim StyleSheet As Object
    Dim Result As Object

    Set Source = CreateObject("MSXML2.DOMDocument")
    Set StyleSheet = CreateObject("MSXML2.DOMDocument")
    Set Result = CreateObject("MSXML2.DOMDocument")

    On Error GoTo TheEnd

    Transform = True
    Source.async = False
    Source.Load sourceFile

    StyleSheet.async = False
    StyleSheet.Load styleSheetFile
    Source.transformNodeToObject StyleSheet, Result
    Result.Save resultFile
    Exit Function

TheEnd:
    Transform = False

End Function

我如何理解錯誤所在?

問題是當你這樣做

Source.transformNodeToObject StyleSheet, Result
Result.Save resultFile

結果樹的序列化是通過Result.Save操作完成的,而不是通過XSLT轉換完成的,因此,在不了解xsl:output聲明的情況下進行了結果樹的序列化。 這是因為Result是一個DOM Document對象,因此XSLT處理器僅創建一個DOM,而不涉及序列化。

我不是這個特定轉換API的專家,但是我認為,如果您提供Stream作為transformNodeToObject的第二個參數,那么它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM