Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何选择使用XSLT动态生成的标记的值_Xml_Xslt - Fatal编程技术网

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

Xml 如何选择使用XSLT动态生成的标记的值,xml,xslt,Xml,Xslt,我想将XML文件转换为CSV,但我的问题是,我不知道如何选择一个标记,该标记的父标记是动态生成的,它可能会多次使用相同的名称,但其内容不同,我的意思是ComponentDetails标记可能会为每个员工显示一次或多次。 在我的例子中,staffNumber 12345 ComponentDetails显示2次,staffNumber 45555 ComponentDetails显示3次,我想从工资标签中选择值,但无法识别它。我已将ID分配给标记,但 主要问题是,由于ComponentDetail

我想将XML文件转换为CSV,但我的问题是,我不知道如何选择一个标记,该标记的父标记是动态生成的,它可能会多次使用相同的名称,但其内容不同,我的意思是ComponentDetails标记可能会为每个员工显示一次或多次。 在我的例子中,staffNumber 12345 ComponentDetails显示2次,staffNumber 45555 ComponentDetails显示3次,我想从工资标签中选择值,但无法识别它。我已将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>

000777
2018-05-15
表演
表演
苹果
苹果有限公司
12345
121212
正常的
9999
薪水
1999
10616
应纳税的
505
7703
45555
131313
正常的
9999
薪水
1999
10616
粗俗的
7305
76703
应纳税的
305
6703

如我所见,
组件详细信息
元素是源XML的一部分。 它们不是动态生成的,至少您没有发布任何XSLT 生成它们的脚本

如果每个
PayDetails
元素仅包含一个
ComponentDetails
, 您可以在XSLT中仅使用它的名称来引用它

但由于它包含多个
组件详细信息
,并且您希望引用 对于“工资”元素,您可以写:

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

嗨,瓦迪欧波,我不知道;我没有XML的来源,我的任务是从XML文件中提取一些细节,并将其转换为CSV格式,因此,在将文件转换为CSV的过程中,如果发现少量标记多次出现,并且包含不同的信息,在我的例子中,ComponentDetails已经出现过多次,在这里面有一个子标记ComponentType包含与ComponentDetails相关的信息,但我不知道如何选择此字段。我可以做一件事来解决这个问题,如果我将金额YTDAmount放入ComponentDetails标记中,但我不知道如何更改XML文件的标记范围。