我会尝试将XML文件转换为CSV,我正在从以下link获取帮助但是我必须从父标记中检索值并从XML中获取某些特定子标记文件。我的输入XML如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Payslip>
<StaffNumber>123456</StaffNumber>
<StaffName>ALIBABA</StaffName>
<Sex/>
<PayDetails>
<PayType>NORMAL</PayType>
<AmountNet>2100</AmountNet>
<ComponentDetails>
<ComponentType>SALARY</ComponentType>
<ComponentSource/>
<Code>SAL</Code>
</ComponentDetails>
<ComponentDetails>
<ComponentType>DED</ComponentType>
<ComponentSource/>
<Code>DEN</Code>
</ComponentDetails>
</PayDetails>
<LeaveTaken>
<StartDate/>
<EndDate/>
<Balance>0</Balance>
</LeaveTaken>
</Payslip>
我的xsl文件看起来像这样,请注意我已经为其他一些要求添加了一些硬编码值。
我是XSLT的新手,所以请原谅潜在的新手问题。这里有任何指导意见。提前谢谢。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/"> Worker,Pay_Group,Pay_Period_End_Date,Payment_Date,Net_Amount,Gross_Amount,Currency,Ck_Number,Display_Date
<xsl:for-each select="//Payslip">
<xsl:value-of select="concat(StaffNumber,',','PAY_GROUP',',','2017-09-24-00:00',',','2017-09-27-00:00',',',AmountNet,',','AmountGross',',','AUD',',','393',',','SLP000393_',StaffNumber,'.pdf',',','
')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在上面的代码中,如果我使用
<xsl:for-each select="//Payslip">
然后我只获得StaffNumber和staffName字段但是如果我使用
<xsl:for-each select="//Payslip//PayDetails">
从AmountNet标记中获取值,然后无法从StaffNumber标记中获取值。
答案 0 :(得分:1)
您只获得StaffNumber
和StaffName
的值,因为它们是Payslip
节点的直接后代。为了获取其他节点的值,必须为每个节点指定正确的XPath表达式。
例如,为了获得AmountNet
的值,您应该将其路径称为:
PayDetails/AmountNet
而不仅仅是
AmountNet
因为for-each循环中的当前节点是Payslip
节点。
<强>更新强>
让<xsl:for-each select="//Payslip">
引用Payslip
节点。只需更改以下行:
<xsl:value-of select="concat(StaffNumber,',','PAY_GROUP',',','2017-09-24-00:00',',','2017-09-27-00:00',',',AmountNet,',','AmountGross',',','AUD',',','393',',','SLP000393_',StaffNumber,'.pdf',',','
')"/>
以下内容:
<xsl:value-of select="concat(StaffNumber,',','PAY_GROUP',',','2017-09-24-00:00',',','2017-09-27-00:00',',',PayDetails/AmountNet,',','AmountGross',',','AUD',',','393',',','SLP000393_',StaffNumber,'.pdf',',','
')"/>