如何选择使用XSLT动态生成的标记的值

时间:2018-05-26 20:42:12

标签: xml xslt

我想将XML文件转换为CSV但我的问题是我不知道如何选择一个动态生成父标记的标记,它可能会多次出现同名,但内容会有所不同,我的意思是每个员工可能会出现一次或多次ComponentDetails标记。 在我的情况下,staffNumber 12345 ComponentDetails出现2次,staffNumber 45555 ComponentDetails出现3次,我想从salary标签中选择值但无法识别它。我已经为标签分配了ID但是 主要的问题是,当ComponentDetails变化时,我无法弄清楚ComponentType将出现在什么位置。

我的XML文件如下:

<?xml version="1.0" encoding="UTF-8"?><root>
    <PayrunDetails>
        <PayrunNumber>000777</PayrunNumber>
        <PaidDate>2018-05-15</PaidDate>
    </PayrunDetails>
    <PayLocation>
        <LocationCode>ACT</LocationCode>
        <LocationDescription>ACT</LocationDescription>
        <CompanyDetails>
            <CCode>APPLE</CCode>
            <CName>APPLE Limited</CName>
            <Payslip>
                <StaffNumber>12345</StaffNumber>
                <BankDetails>
                    <BankAccountNo>121212</BankAccountNo>
                </BankDetails>
                <PayDetails>
                    <PayType>NORMAL</PayType>
                    <AmountGross>9999</AmountGross>
                    <ComponentDetails ID="1">
                        <ComponentType>SALARY</ComponentType>
                        <Amount>1999</Amount>
                        <YTDAmount>10616</YTDAmount>
                    </ComponentDetails>
                    <ComponentDetails ID="3">
                        <ComponentType>TAXABLE</ComponentType>
                        <Amount>505</Amount>
                        <YTDAmount>7703</YTDAmount>
                    </ComponentDetails>
                </PayDetails>
            </Payslip>
            <Payslip>
                <StaffNumber>45555</StaffNumber>
                <BankDetails>
                    <BankAccountNo>131313</BankAccountNo>
                </BankDetails>
                <PayDetails>
                    <PayType>NORMAL</PayType>
                    <AmountGross>9999</AmountGross>
                    <ComponentDetails ID="1">
                        <ComponentType>SALARY</ComponentType>
                        <Amount>1999</Amount>
                        <YTDAmount>10616</YTDAmount>
                    </ComponentDetails>
                    <ComponentDetails ID="2">
                        <ComponentType>GROSS</ComponentType>
                        <Amount>7305</Amount>
                        <YTDAmount>76703</YTDAmount>
                    </ComponentDetails>
                    <ComponentDetails ID="3">
                        <ComponentType>TAXABLE</ComponentType>
                        <Amount>305</Amount>
                        <YTDAmount>6703</YTDAmount>
                    </ComponentDetails>
                </PayDetails>
            </Payslip>
        </CompanyDetails>
    </PayLocation>
</root>

1 个答案:

答案 0 :(得分:0)

正如我所见,ComponentDetails元素是源XML 的一部分。 它们不是动态生成的,至少你没有发布任何XSLT 生成它们的脚本。

如果每个PayDetails元素只包含一个ComponentDetails, 你可以使用它的名字在XSLT中引用它。

但是因为它包含多个ComponentDetails并且您想引用 到了工资&#34;元素,您可以写:

select="ComponentDetails[ComponentType='SALARY']"