Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT在Access 2013上失败_Xml_Ms Access_Xslt_Ms Access 2013 - Fatal编程技术网

Xml XSLT在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.

我们一直在使用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.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,希望其他人可以提供帮助。