我想将file.xml解释为file.txt,这不是问题,但是当我尝试"采取"不同标签中的很多东西。
请查看我的file.xml:
<racine>
<balise1>
<info>
<Commercial>1000</Commercial>
<OrdId>42</OrdId>
<CustomerId>314159</CustomerId>
</info>
</balise1>
<balise2>
<info2>
<Quantity>1</Quantity>
<Price>10.0</Price>
<Currency>CHF</Currency>
</info2>
</balise2>
</racine>
我想要这个输出;
Commercial,Order,CustomerId,Quantity,Price,Currency
1000,42,314159,1,10.0,CHF
我尝试了很多解决方案,但我在XSLT中是一个菜鸟。
以下是我的xslt:
的示例<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSl/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:text>Commercial,OrdId,CustomerId,Quantity,Price,Currency</xsl:text>
<xsl:text>
</xsl:text>
<xsl:apply-templates select="racine"/>
</xsl:template>
<xsl:template match="racine">
<xsl:apply-templates select="balise1/info"/>
</xsl:template>
<xsl:template match="info">
<xsl:value-of select="Commercial"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="OrdId"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="CustomerId"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="info">
<xsl:apply-templates select="balise2/info2"/>
</xsl:template>
<xsl:template match="info2">
<xsl:value-of select="ItemQuantity"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="PriceValue"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="CurrencyCode"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
您有两个匹配"info"
的模板,这在XSLT中被视为错误。通过查看您的需求,可能应该从匹配racine
的模板中调用第二个模板的主体
<xsl:template match="racine">
<xsl:apply-templates select="balise1/info"/>
<xsl:apply-templates select="balise2/info2"/>
</xsl:template>
其他需要注意的事项
http://www.w3.org/1999/XSl/Transform
<{1}} http://www.w3.org/1999/XSL/Transform
模板指的是XML中不存在的元素。试试这个XSLT
info2
答案 1 :(得分:1)
如果您的输入格式固定,则可以在 XSLT 2.0
中轻松处理<xsl:template match="/">
<xsl:text>Commercial,OrdId,CustomerId,Quantity,Price,Currency</xsl:text>
<xsl:text>
</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="racine">
<xsl:value-of select="balise1/info/*|balise2/info2/*" separator=","/>
<xsl:text>
</xsl:text>
</xsl:template>
答案 2 :(得分:-1)
Check this code
<xsl:template match="/">
<xsl:text>Commercial,OrdId,CustomerId,Quantity,Price,Currency</xsl:text>
<xsl:text>
</xsl:text>
<xsl:apply-templates select="racine"/>
</xsl:template>
<xsl:template match="info">
<xsl:value-of select="Commercial"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="OrdId"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="CustomerId"/>
</xsl:template>
<xsl:template match="info2">
<xsl:value-of select="Quantity"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="Price"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="Currency"/>
<xsl:text>
</xsl:text>
</xsl:template>