我对XSLT的了解有限,但始终渴望学习。我目前正在研究一个需要转换XML输入的模板。我一直在尝试对InvoiceNum字段进行分组,但没有得到任何结果。 我收到错误消息:Envision.Utilities.XsltEngine-Object引用未设置为对象的实例。
以下是输入XML供参考:
<?xml version='1.0' ?>
<Request>
<Information>
<ImageID>987456321</ImageID>
<Contract>123456789</Contract>
<Lastname>MICKEYMOUSE</Lastname>
</Information>
<Document>
<InvoiceNum>123456823</InvoiceNum>
<Reference>AD20985224</Reference>
<InvoiceNum>100000123</InvoiceNum>
<Reference>AS20101387</Reference>
<InvoiceNum>858511825</InvoiceNum>
<Reference>GF96844</Reference>
<InvoiceNum>885154145</InvoiceNum>
<Reference>FGFD2018</Reference>
<InvoiceNum>25241111</InvoiceNum>
<Reference>SD88888</Reference>
<InvoiceNum>8571414</InvoiceNum>
<Reference>DF864841254</Reference>
</Document>
</Request>
这是我的XSLT格式供参考: 我想念什么?有没有更好的方法来格式化我目前在下面的XSLT模板?任何帮助将不胜感激。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="cols" select="3" />
<xsl:template match="Request">
<table border="1">
<xsl:apply-templates select="InvoiceNum[position() mod $cols = 1]"/>
</table>
</xsl:template>
<xsl:template match="Document">
<xsl:variable name="group" select=". | following-sibling::InvoiceNum
[position() < $cols]" />
<xsl:for-each select="*">
<xsl:variable name="i" select="position()" />
<Invoice>
<InvoiceNumber>
<xsl:value-of select="InvoiceNum()"/>
</InvoiceNumber>
<xsl:for-each select="$group">
<xsl:value-of select="*[$i]"/>
</xsl:for-each>
</Invoice>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
这是我想要的XML输出:
<InvCase>
<Invoices>
<InvoicemNumber>InvoiceNum1</InvoicemNumber>
<InvoicemNumber>InvoiceNum2</InvoicemNumber>
<InvoicemNumber>InvoiceNum3</InvoicemNumber>
</Invoices>
</InvCase>
答案 0 :(得分:1)
您似乎正在尝试将InvoiceNum
分为3组。您遇到的第一个问题是,在与Request
匹配的模板中,您需要这样做...
<xsl:apply-templates select="InvoiceNum[position() mod $cols = 1]"/>
但是InvoiceNum
不是Request
的子代,因此什么也没选择。您可能需要这样做...
此外,您有一个匹配Document
的模板,但这可能需要匹配InvoiceNum
(如果您将following-sibling::InvoiceNum
匹配为{,则进行Document
不会返回任何内容{1}}元素是InvoiceNum
的子元素,不紧随同级。
尝试使用此XSLT
Document