客户提供了一个合并的XML,需要将其转换为所需的格式,这可以通过以下XSLT完成。
唯一的问题是发票实体“编号”,如何获得正确的发票编号作为XML中的节点?
XML:
<invoices>
<invoice number="5555">
<order_id>
<ordernumber>1000</ordernumber>
</order_id>
<general_info>General A</general_info>
<address>Adress A</address>
<products>
<product>
<id>A</id>
<item/>
<item/>
</product>
<product>
<id>B</id>
<item/>
<item/>
</product>
<product>
<id>C</id>
<item/>
<item/>
</product>
</products>
</invoice>
<invoice number="7777">
<order_id>
<ordernumber>2000</ordernumber>
</order_id>
<general_info>General B</general_info>
<address>Adress B</address>
<products>
<product>
<id>D</id>
<item/>
<item/>
</product>
</products>
</invoice>
XSLT:
<xsl:template match="invoices">
<xsl:copy>
<xsl:apply-templates select="invoice/products/product"/>
</xsl:copy>
</xsl:template>
<xsl:template match="product">
<invoice>
<xsl:copy>
<xsl:copy-of select="*"/>
</xsl:copy>
<xsl:copy-of select="../../general_info"/>
<xsl:copy-of select="../../address"/>
<invoicenumber><xsl:value-of select="../../../invoice/@number"/></invoicenumber>
</invoice>
</xsl:template>
对于当前的XSLT,发票号始终为5555。 如何获得每种产品的正确发票编号? (项目D应该有7777)
当前输出:
<invoices>
<invoice>
<product>
<id>A</id>
<item/>
<item/>
</product>
<general_info>General A</general_info>
<address>Adress A</address>
<invoicenumber>5555</invoicenumber>
</invoice>
<invoice>
<product>
<id>B</id>
<item/>
<item/>
</product>
<general_info>General A</general_info>
<address>Adress A</address>
<invoicenumber>5555</invoicenumber>
</invoice>
<invoice>
<product>
<id>C</id>
<item/>
<item/>
</product>
<general_info>General A</general_info>
<address>Adress A</address>
<invoicenumber>5555</invoicenumber>
</invoice>
<invoice>
<product>
<id>D</id>
<item/>
<item/>
</product>
<general_info>General B</general_info>
<address>Adress B</address>
<invoicenumber>5555</invoicenumber>
</invoice>
</invoices>
所需的输出:
<invoices>
<invoice>
<product>
<id>A</id>
<item/>
<item/>
</product>
<general_info>General A</general_info>
<address>Adress A</address>
<invoicenumber>5555</invoicenumber>
</invoice>
<invoice>
<product>
<id>B</id>
<item/>
<item/>
</product>
<general_info>General A</general_info>
<address>Adress A</address>
<invoicenumber>5555</invoicenumber>
</invoice>
<invoice>
<product>
<id>C</id>
<item/>
<item/>
</product>
<general_info>General A</general_info>
<address>Adress A</address>
<invoicenumber>5555</invoicenumber>
</invoice>
<invoice>
<product>
<id>D</id>
<item/>
<item/>
</product>
<general_info>General B</general_info>
<address>Adress B</address>
<invoicenumber>7777</invoicenumber>
</invoice>
</invoices>
答案 0 :(得分:1)
例如,使用导航到祖先invoice
。 <invoicenumber><xsl:value-of select="ancestor::invoice/@number"/></invoicenumber>
。