我需要在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
我如何理解错误是什么?
答案 0 :(得分:0)
问题是当你做
时Source.transformNodeToObject StyleSheet, Result
Result.Save resultFile
结果树的序列化由Result.Save操作完成,而不是由XSLT转换完成,因此在不知道xsl:output声明的情况下完成。这是因为Result是一个DOM Document对象,因此XSLT处理器只创建一个不涉及序列化的DOM。
我不是这个特定转换API的专家,但我认为如果你提供Stream作为transformNodeToObject的第二个参数,那么它应该可以工作。