繁体   English   中英

从 XML 文件的两个不同标签中获取值并使用 XSLT 连接提取的值

[英]Get the values from two different tags of a XML file and concatenate the extracted value using XSLT

我会尝试将 XML 文件转换为 CSV,我正在从以下链接获取帮助,但在一个地方我必须从同一级别存在的两个不同标签中检索值。 我必须从第一个标签中选择一个值,然后从下一个标签中选择其子和子子标签值。 要从第二个标签中选择值,我使用了迭代器,最后,我必须在同一行中发布输出,但我不知道如何从第一个标签和第二个标签中选择值并连接第一个标签的值来自第二个标签。 为了获得更多说明,我附上了以下示例输出:
我的输入 XML 示例如下:

<PayLocation>
    <LocationCode>VNS</LocationCode>
    <LocationDescription>VARANASI</LocationDescription>
    <PayrunDetails>
        <PayrunNumber>000428</PayrunNumber>
    </PayrunDetails>
    <CompanyDetails>
        <CompanyCode>Stack99</CompanyCode>
        <CompanyName>StackOverFlow</CompanyName>

        <Payslip>
            <StaffNumber>123456</StaffNumber>
            <StaffName>ALIBABA</StaffName>      
            <PayDetails>
                <AmountNet>2100</AmountNet> 
                <ComponentDetails>
                    <ComponentType>SALARY</ComponentType>
                    <Code>SAL</Code>
                </ComponentDetails>                          
            </PayDetails>
            <LeaveTaken>
                <Description>LEAVE</Description>
                <StartDate/>
                <EndDate/>
            </LeaveTaken>
        </Payslip>

        <Payslip>
            <StaffNumber>456789</StaffNumber>
            <StaffName>AMAZON</StaffName>      
            <PayDetails>
                <AmountNet>2200</AmountNet> 
                <ComponentDetails>
                    <ComponentType>SALARY</ComponentType>
                    <Code>SAL</Code>
                </ComponentDetails>                         
            </PayDetails>
            <LeaveTaken>
                <Description>LEAVE</Description>
                <StartDate>2015-05-28</StartDate>
                <EndDate>2015-05-31</EndDate>
            </LeaveTaken>
        </Payslip>
    </CompanyDetails>
</PayLocation>

我的预期输出示例如下:

输出样本

以上输出包含我从第一个标签获得的第一列值以及我从第二个标签及其子标签获得的其余值。

我也在分享我的 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="/">
StaffNumber,Payslip
<xsl:for-each select="//PayLocation/CompanyDetails/Payslip">
<xsl:value-of select="concat(StaffNumber,',',PayDetails/AmountNet,'&#xA;')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

请注意,我没有在上面的 XSL 文件中提到 PayNumber、CompanyCode、CompanyName,因为我不知道如何选择第一个标签和第二个标签的值。 我对 XSLT 还很陌生,所以请原谅潜在的新手问题。 任何指导将不胜感激。 提前致谢。

要获得CompanyCode (和CompanyName ),您可以这样做

parent::*/CompanyCode

即,获取当前父项下的子CompanyCode

这可以简化为

../CompanyCode

同样要获得工资编号,这是祖父母的孩子,这样做......

../../PayrunDetails/PayrunNumber

试试这个 XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
    <xsl:text>PayNumber,CompanyCode,CompanyNameStaffNumber,Payslip&#10;</xsl:text>
    <xsl:for-each select="//PayLocation/CompanyDetails/Payslip">
        <xsl:value-of select="concat(../../PayrunDetails/PayrunNumber,',',../CompanyCode,',',../CompanyName,',',StaffNumber,',',PayDetails/AmountNet,'&#xA;')"/>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM