csv - 使用XSLT进行字符串操作

  显示原文与译文双语对照的内容
0 0

我使用XSLT从XML文件创建CSV文件。

当前的xml文件看起来像

<VWSRecipeFile>
<PDCScaling User="" Version="1.0" Description="PDCTesting" LastChange="41984.7673783102">
 <Values>
 <Ch1_MLC_Application_GVLPDC_PDC_Body_Sca_GrossWeightTopFlash_Set Item="Upper flash_set" Unit="kg" Type="4" Hex="00000000" Value="0"/>
 <Ch1_MLC_Application_GVLPDC_PDC_Body_Sca_GrossWeightTopFlash_Act Item="Upper flash_act" Unit="kg" Type="4" Hex="00000000" Value="0"/>
 <Ch1_MLC_Application_GVLPDC_PDC_Body_Sca_GrossWeightTopFlash_TolUpp Item="Upper flash_max" Unit="kg" Type="4" Hex="00000000" Value="0"/> 
 </Values>
</PDCScaling>
</VWSRecipeFile>

我的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" indent="no"/>
<xsl:template match="/VWSRecipeFile">
 <xsl:for-each select="PDCScaling/Values/*">
 <xsl:value-of select="concat(@Item,';')"/>
 </xsl:for-each>
 <xsl:text>&#xA;</xsl:text>
 <xsl:for-each select="PDCScaling/Values/*">
 <xsl:value-of select="concat(@Unit,';')"/>
 </xsl:for-each>
 <xsl:text>&#xA;</xsl:text>
 <xsl:for-each select="PDCScaling/Values/*">
 <xsl:value-of select="concat(@Value,';')"/>
 </xsl:for-each>
 <xsl:text>&#xA;</xsl:text>
</xsl:template>
</xsl:stylesheet>

现在xml文件有了变化,它看起来像

<VWSRecipeFile>
<PDCScaling User="" Version="1.0" Description="PDCTesting" LastChange="41984.7673783102">
 <Values>
 <Ch1_MLC_Application_GVLPDC_PDC_Body_Sca_GrossWeightTopFlash_Set Item="Upper flash_set_kg" Type="4" Hex="00000000" Value="0"/>
 <Ch1_MLC_Application_GVLPDC_PDC_Body_Sca_GrossWeightTopFlash_Act Item="Upper flash_act_kg" Type="4" Hex="00000000" Value="0"/>
 <Ch1_MLC_Application_GVLPDC_PDC_Body_Sca_GrossWeightTopFlash_TolUpp Item="Upper flash_max_kg" Type="4" Hex="00000000" Value="0"/> 
 </Values>
</PDCScaling>
</VWSRecipeFile>

更改的是,在当前文件中合并了"项目"和"单位",并且类似"item_unit"。 我希望生成与以前相同的reults 。 在创建CSV之前,我需要将"项目"分解为"项目"和"单位",然后创建 CSV 。 谁能告诉我有效的方法。 感谢你的帮助

时间:原作者:4个回答

0 0

从一个旧的答案中获取 substring-before-last 函数 ,并使用它:

<xsl:for-each select="PDCScaling/Values/*">
 <xsl:call-template name="substring-before-last">
 <xsl:param name="string1" select="@Value"/>
 <xsl:param name="string2" select="'_'"/>
 </xsl:call-template>
 <xsl:text>;</xsl:text>
</xsl:for-each>
原作者:
...