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

问题描述 投票:1回答:1

我将尝试将XML文件转换为CSV,我从以下link中寻求帮助,但在一个地方,我必须从同一级别存在的两个不同标签中检索值。我必须从第一个标签中选择一个值,然后从下一个标签中选择其子标签和子子标签值。为了从第二个标签中选择值,我使用了一个迭代器,最后,我必须将输出发布在同一行中,但是我不知道如何从第一个标签以及第二个标签中选择值并连接第一个标签的值来自第二个标签。为了进一步说明,我附加了以下示例输出:我的输入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>

我的预期输出示例如下:

output sample

Above Output包含我从第一个标签获取的第一列值,以及我从第二个标签及其子标签获取的其余值。

我也在共享我的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不太熟悉,所以请原谅潜在的新手问题。任何指导将不胜感激。预先感谢。

xml xslt xml-parsing
1个回答
1
投票

要获得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>
© www.soinside.com 2019 - 2024. All rights reserved.