我有一个xslt文件,它将Peppol供应商发票转换为可以导入到我们的ERP-系统中的xml。导入的xml对于每个管理具有相同的布局,因此xslt也可以应用于每个管理。但是,xslt包含长列表(许多供应商),以包含供应商相关的供应商和其他参数。xslt中的供应商列表在每个管理中是不同的(我们有大约10个管理/公司,每个供应商大约有100个供应商,我们从其中导入xml发票)。
<xsl:variable name="VendorShortName">
<xsl:choose>
<xsl:when test="cac:PartyName/cbc:Name = 'SuperVendor'">SuperV</xsl:when>
....
....
<xsl:otherwise><xsl:value-of select="cbc:Name"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<SupplierAccountNum>
<xsl:choose>
<xsl:when test="cbc:Name = 'SuperVendor'">20220</xsl:when>
....
....
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</SupplierAccountNum>将来,我希望用SQL动态地生成xslt,并将源信息包含在我们的ERP系统中,但目前我不得不手动管理这些列表。
理想情况下,我希望将这些列表放在不同的文档中,并根据管理(=公司)的名称包括这些文档/列表。这使得手动管理更容易。
在如何管理这方面有什么最佳实践吗?
发布于 2022-07-27 12:45:03
将这样的辅助数据保存在外部XML文件中,并让XSLT在运行时加载适当的XML,并使用它查找内容确实非常简单。
例如,如果输入文档为您提供了合适的名称,您可能会决定为每个供应商拥有一个单独的查找文件,并按名称加载它。遵循您的示例,下面是一个名为SuperVendor.xml的文件
<vendor>
<shortName>SuperV</shortName>
<accountNum>20220</accountNum>
</vendor>在XSLT中,您可以动态加载该文件:
<xsl:variable name="vendor-file" select="concat(/cac:PartyName/cbc:Name, '.xml')">
<xsl:variable name="vendor-data" select="document($vendor-file)/vendor"/>然后您就可以在XSLT中的任何地方使用该查找数据..。
<SupplierAccountNum><xsl:value-of select="$vendor-data/accountNum"/></supplierAccountNum>如果以这种方式管理更方便,也可以从包含所有供应商数据的单个XML文件中读取,更像这样:
<vendors>
<vendor>
<name>SuperVendor</name>
<shortName>SuperV</shortName>
<accountNum>20220</accountNum>
</vendor>
...
</vendors>..。然后像这样加载:
<xsl:variable name="current-vendor-name" select="/cac:PartyName/cbc:Name"/>
<xsl:variable name="vendor-data"
select="document('vendors.xml')/vendors/vendor[name=$current-vendor-name]"/>https://stackoverflow.com/questions/73137322
复制相似问题