Xml XSLT在Access 2013上失败
我们一直在使用XSLT模板将一个XML文件转换为另一个XML文件,以便导入Access 2003表中,但自从移动到Access 2013后,这种方法就不再有效了 这是模板Xml XSLT在Access 2013上失败,xml,ms-access,xslt,ms-access-2013,Xml,Ms Access,Xslt,Ms Access 2013,我们一直在使用XSLT模板将一个XML文件转换为另一个XML文件,以便导入Access 2003表中,但自从移动到Access 2013后,这种方法就不再有效了 这是模板 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:nr1="urn:com.axonglobal.mcc.academy.payments.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:nr1="urn:com.axonglobal.mcc.academy.payments.ap.inbound" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<root>
<xsl:apply-templates />
</root>
</xsl:template>
<xsl:template match="nr1:mt_generic_ap_source_file_xml/fileheader">
</xsl:template>
<xsl:template match="nr1:mt_generic_ap_source_file_xml/filetrailer">
</xsl:template>
<xsl:template match="nr1:mt_generic_ap_source_file_xml/invoiceheader[ paymentmethod = 'C' ] ">
</xsl:template>
<xsl:template match="nr1:mt_generic_ap_source_file_xml/invoiceheader[ paymentmethod = 'B' ] ">
<xsl:variable name="paytype" select="substring(headertext,1,2)" />
<tblBACS_Payments>
<creditor_id>
<xsl:value-of select="substring-after(headertext,'|')" />
</creditor_id>
<cheque_num>
<xsl:value-of select="vendorname2" />
</cheque_num>
<posting_date>
<xsl:value-of select="concat(substring(postingdate,1,4),'-',substring(postingdate,5,2),'-',substring(postingdate,7,2))" />
</posting_date>
<paymenttype>
<xsl:value-of select="document('sappaycats.xml')/paycategories/category[@id = $paytype]/@description" />
</paymenttype>
<invoicetotal>
<xsl:value-of select="invoicetotal" />
</invoicetotal>
<xsl:for-each select="headerremittance [textid = 'PA'] ">
<payee_name>
<xsl:value-of select="text[1]" />
</payee_name>
</xsl:for-each>
<sortcode>
<xsl:value-of select="bankkey" />
</sortcode>
<bankaccount>
<xsl:value-of select="bankaccount" />
</bankaccount>
<bankref>
<xsl:value-of select="buildingsocietyref" />
</bankref>
</tblBACS_Payments>
</xsl:template>
</xsl:stylesheet>
下面是XML的一个示例
<?xml version="1.0" encoding="UTF-8"?>
<nr1:mt_generic_ap_source_file_xml xmlns:nr1="xxx">
<fileheader>
<datatype>H0</datatype>
<sourcesystem>System</sourcesystem>
<interfaceid>0130</interfaceid>
<date>20161219</date>
<filename>File</filename>
<runnumber>20160051</runnumber>
</fileheader>
<invoiceheader>
<datatype>H1</datatype>
<invoicereference>1486322</invoicereference>
<vendorid>xxx</vendorid>
<legacyvendorid/>
<invoicetotal>7.34</invoicetotal>
<currencycode>GBP</currencycode>
<discount/>
<paymentterm/>
<paymentmethod>C</paymentmethod>
<paymentsupplement/>
<invoicedate>20161226</invoicedate>
<postingdate>20161226</postingdate>
<businessarea/>
<headertext>03|91238</headertext>
<contactname/>
<contactnumber/>
<vendorname1>xxxx</vendorname1>
<vendorname2>1486322</vendorname2>
<vendorname3/>
<vendorname4/>
<houseandstreet>xxxx</houseandstreet>
<city>xxx</city>
<postcode>M12 3AB:</postcode>
<pobox/>
<poboxpostcode/>
<country>GB</country>
<faxnumber/>
<headerremittance>
<datatype>R1</datatype>
<textid>MA</textid>
<text>.....</text>
<text>XYZ</text>
<text>XYZ</text>
<text>XYZ</text>
<text>XYZ</text>
</headerremittance>
<headerremittance>
<datatype>R1</datatype>
<textid>PA</textid>
<text>xxxxx</text>
</headerremittance>
<invoiceitem>
<datatype>D2</datatype>
<itemnumber>0000000001</itemnumber>
<amount>7.34</amount>
<taxamount/>
<taxcode>V3</taxcode>
<costcentre>105417</costcentre>
<glcode>462000</glcode>
<companycode>1000</companycode>
<businessarea/>
<itemtext/>
</invoiceitem>
</invoiceheader>
</nr1:mt_generic_ap_source_file_xml>
H0
系统
0130
20161219
文件
20160051
H1
1486322
xxx
7.34
英镑
C
20161226
20161226
03|91238
xxxx
1486322
xxxx
xxx
M12 3AB:
国标
R1
文科硕士
.....
XYZ
XYZ
XYZ
XYZ
R1
帕
xxxxx
D2
0000000001
7.34
V3
105417
462000
1000
Access中出现错误“指定的转换无法成功转换数据”,但在Access 2003中工作正常吗
有什么想法吗?我从未将XSLT与Access一起使用过,但自从XSLT 1.0于1999年发布以来,大多数处理器(如
XslCompiledTransform
或MSXML 6)默认情况下都被更改为不允许使用例如文档('sappaycats.xml')
,这是出于安全原因,默认情况下使用文档
功能,并且需要显式启用该功能。因此,您可能需要检查Access是否提供任何设置,以允许在它执行的XSLT样式表中使用文档。@MartinHonnen。。。正如您所指出的,MS Access和所有Office软件一样,可以作为VBA参考或COM对象与库接口。默认情况下,document()
是关闭的,但可以允许。@BenHamilton-请显示处理XSLT的代码。我们需要知道你是如何运行它的。回想一下,XSLT是一种专用语言,实际上只是一个XML文件。某些通用语言/可执行文件/客户端必须运行它。@MartinHonnen谢谢,我可能必须在access中使用旧库将其作为VBA模块实现,或者检查access 2013中的设置。我们目前只准备外部数据导入XML,然后选择转换。我完全忘记了sappaycats.xml文件——它是一个单独的文件,与.xsl文件存储在同一个文件夹中。也许有一种方法可以将此信息包含在.xsl中。如果使用VBA和MSXML 6来实现转换,那么只需确保将AllowDocumentFunction
设置为true,我认为不需要使用旧库。至于使用导入XML功能,我希望它允许您在需要时配置MSXML以设置此类属性,但我不熟悉Access,希望其他人可以提供帮助。