我对 XML/XSLT 还很陌生,如果这很简单,我深表歉意。我正在尝试转换包含指示向员工付款的列的 XML 文件,以便每笔付款以及该列的员工信息和付款类型都位于单独的行中。
即:
<?xml version='1.0' encoding='UTF-8'?>
<Report>
<Row><col1>ID</col1><col2>NAME</col2><col3>SALARY</col3><col4>BONUS</col4><col5>SICK PAY</col5><col6>CHRISTMAS PAY</col6></Row>
<Row><col1>1001</col1><col2>Joe Bloggs</col2><col3>1500.00</col3><col4>150.00</col4><col5>50.00</col5><col6>0.00</col6></Row>
<Row><col1>1005</col1><col2>Jane Smith</col2><col3>2000.00</col3><col4>250.00</col4><col5>25.00</col5><col6>15.00</col6></Row>
</Report>
对此:
<?xml version='1.0' encoding='UTF-8'?>
<Report>
<Row><ID>1001</ID><NAME>Joe Bloggs</NAME><PAYTYPE>SALARY</PAYTYPE><AMOUNT>1500.00</AMOUNT></Row>
<Row><ID>1001</ID><NAME>Joe Bloggs</NAME><PAYTYPE>BONUS</PAYTYPE><AMOUNT>150.00</AMOUNT></Row>
<Row><ID>1001</ID><NAME>Joe Bloggs</NAME><PAYTYPE>SICKPAY</PAYTYPE><AMOUNT>50.00</AMOUNT></Row>
<Row><ID>1001</ID><NAME>Joe Bloggs</NAME><PAYTYPE>CHRISTMASPAY</PAYTYPE><AMOUNT>0</AMOUNT></Row>
<Row><ID>1005</ID><NAME>Jane Smith</NAME><PAYTYPE>SALARY</PAYTYPE><AMOUNT>2000.00</AMOUNT></Row>
<Row><ID>1005</ID><NAME>Jane Smith</NAME><PAYTYPE>BONUS</PAYTYPE><AMOUNT>250.00</AMOUNT></Row>
<Row><ID>1005</ID><NAME>Jane Smith</NAME><PAYTYPE>SICKPAY</PAYTYPE><AMOUNT>25.00</AMOUNT></Row>
<Row><ID>1005</ID><NAME>Jane Smith</NAME><PAYTYPE>CHRISTMASPAY</PAYTYPE><AMOUNT>15.00</AMOUNT></Row>
</Report>
挑战在于,如果添加更多列(通过其他付款),它需要动态地容纳更多列。这可能吗?
老实说,我不知道从哪里开始。我尝试过根据各种谷歌搜索拼凑一些 XSLT 来尝试输出甚至一列,例如
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="column-name" match="Row[1]/Item" use="count(preceding-sibling::Item)" />
<xsl:template match="/">
<Table>
<xsl:for-each select="Report/Row[position() > 1]">
<Row>
<xsl:apply-templates select="Item"/>
</Row>
</xsl:for-each>
</Table>
</xsl:template>
<xsl:template match="Item">
<Column name="{key('column-name', count(preceding-sibling::Item))}">
<xsl:value-of select="."/>
</Column>
</xsl:template>
</xsl:stylesheet>
但一点喜悦也没有。有人能指出我正确的方向吗?
非常感谢:) AJ