我正在尝试将一个 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 的新手,所以请原谅这个潜在的新手问题。任何指导将不胜感激。提前致谢。
风格.xsl
<?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 标签中获取值。
最佳答案
您只能获得 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',',','
')"/>
关于java - 使用 XSLT 从 xml 文件的父标签和子标签获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50473645/