Access VBA 没有运行我的 XML 转换
Access VBA is not running my XML transformation
我有一个访问数据库,可以将数据导出到 XML 文档,然后使用 XSLT 文件对其进行转换。直到几分钟前它都运行良好,突然间,它不再转换 XML,但它仍然进行第一次导出。
这是我的 VBA 代码;
Option Compare Database
Option Explicit
Private Sub Command364_Click()
Dim objAD As AdditionalData
Set objAD = Application.CreateAdditionalData
With objAD
.Add "master_version"
.Add "press_section"
.Add "version"
.Add "task_info_press_section"
.Add "task_info_post_press"
.Add "post_press_version"
End With
Application.ExportXML acExportQuery, "order", _
"C:\Users\James Brace\Documents\Technique Access Stuff\Exports\ExportPreXSLT.xml", _
WhereCondition:="[ORDERPK] = " & [Forms]![frmMAINENTRY]![ORDERPK], _
AdditionalData:=objAD
Application.TransformXML "C:\Users\James Brace\Documents\Technique Access Stuff\Exports\ExportPreXSLT.xml", _
"C:\Users\James Brace\Documents\Technique Access Stuff\Exports\XSLT Template.xsl", _
"C:\Users\James Brace\Documents\Technique Access Stuff\Exports\ExportTransformed.xml"
End Sub
这段代码没有任何变化,所以我不明白为什么它突然停止工作了。它肯定会触发整个事件,因为我已经在 TransformXML 命令前后使用 MsgBox 行对其进行了测试。这是我正在使用的 XSLT;
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- removes specified nodes from all elements -->
<xsl:template match="ORDER"/>
<xsl:template match="ORDERPK"/>
<xsl:template match="PRESS_x0020_SECTION"/>
<xsl:template match="POST_x0020_PRESS"/>
<!-- Creates attributes against the ORDER element -->
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="dataroot">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::master_version)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="job_id | site_code | Replace"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="order">
<order job_id="{job_id}" site_code="{site_code}" replace="{Replace}">
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="../master_version"/>
</order>
</xsl:template>
<xsl:template match="press_section">
<press_section>
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="../task_info_press_section"/>
</press_section>
</xsl:template>
<xsl:template match="../task_info_press_section">
<xsl:element name="task_info">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="task_info_post_press">
<xsl:element name="task_info2">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="master_version[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="press_section[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="version[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="task_info_press_section[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="task_info_post_press[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="post_press_version[not(ORDER = //order/ORDERPK)]"/>
</xsl:stylesheet>
感谢任何帮助,谢谢!
编辑;我也试过反编译然后编译代码,以及对数据库进行压缩和修复,但这并没有改变任何东西。
没关系,这是 XSLT 中的一个错误。我找不到错误,但从头开始重写代码完成了工作。
我有一个访问数据库,可以将数据导出到 XML 文档,然后使用 XSLT 文件对其进行转换。直到几分钟前它都运行良好,突然间,它不再转换 XML,但它仍然进行第一次导出。
这是我的 VBA 代码;
Option Compare Database
Option Explicit
Private Sub Command364_Click()
Dim objAD As AdditionalData
Set objAD = Application.CreateAdditionalData
With objAD
.Add "master_version"
.Add "press_section"
.Add "version"
.Add "task_info_press_section"
.Add "task_info_post_press"
.Add "post_press_version"
End With
Application.ExportXML acExportQuery, "order", _
"C:\Users\James Brace\Documents\Technique Access Stuff\Exports\ExportPreXSLT.xml", _
WhereCondition:="[ORDERPK] = " & [Forms]![frmMAINENTRY]![ORDERPK], _
AdditionalData:=objAD
Application.TransformXML "C:\Users\James Brace\Documents\Technique Access Stuff\Exports\ExportPreXSLT.xml", _
"C:\Users\James Brace\Documents\Technique Access Stuff\Exports\XSLT Template.xsl", _
"C:\Users\James Brace\Documents\Technique Access Stuff\Exports\ExportTransformed.xml"
End Sub
这段代码没有任何变化,所以我不明白为什么它突然停止工作了。它肯定会触发整个事件,因为我已经在 TransformXML 命令前后使用 MsgBox 行对其进行了测试。这是我正在使用的 XSLT;
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- removes specified nodes from all elements -->
<xsl:template match="ORDER"/>
<xsl:template match="ORDERPK"/>
<xsl:template match="PRESS_x0020_SECTION"/>
<xsl:template match="POST_x0020_PRESS"/>
<!-- Creates attributes against the ORDER element -->
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="dataroot">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::master_version)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="job_id | site_code | Replace"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="order">
<order job_id="{job_id}" site_code="{site_code}" replace="{Replace}">
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="../master_version"/>
</order>
</xsl:template>
<xsl:template match="press_section">
<press_section>
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="../task_info_press_section"/>
</press_section>
</xsl:template>
<xsl:template match="../task_info_press_section">
<xsl:element name="task_info">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="task_info_post_press">
<xsl:element name="task_info2">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="master_version[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="press_section[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="version[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="task_info_press_section[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="task_info_post_press[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="post_press_version[not(ORDER = //order/ORDERPK)]"/>
</xsl:stylesheet>
感谢任何帮助,谢谢!
编辑;我也试过反编译然后编译代码,以及对数据库进行压缩和修复,但这并没有改变任何东西。
没关系,这是 XSLT 中的一个错误。我找不到错误,但从头开始重写代码完成了工作。