[英]Copying an XML file including doctype, entities and notations XSLT 3
[英]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.