【发布时间】:2016-03-07 06:15:06
【问题描述】:
如果有人可以帮助我,我将不胜感激。我正在尝试使用相应的 XSLT 转换将此 XML 输出到 CSV 文件中。用户有许多分配给他/她的角色和组。有些角色是直接分配的,有些是通过组分配的。我希望根据分配给她的每个角色或组为用户创建新行,如下所示:
User;Account;Service;Group;Role
Natalie Petit; petna; S1; G1; R1;
Natalie Petit; petna; S1; G1; R2;
Natalie Petit; petna;S2;;R1;
Natalie Petit; petna;S2;;R3;
这是 XML 源代码:
<?xml version="1.0" encoding="UTF-8"?>
<provider>
<service>
<name>S1</name>
<group>
<name>G1</name>
<role>
<name>R1</name>
<name>R2</name>
</role>
</group>
</service>
<service>
<name>S2</name>
<group/>
<role>
<name>R1</name>
<name>R3</name>
</role>
</service>
<user>
<name>Natalie Petit</name>
<account>petna</account>
</user>
</provider>
这是我的 XSLT,但没有把我带到那里:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:text>User;Account;Service;Group;Role</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="service">
<xsl:for-each select=".">
<xsl:value-of select="name"/>
<xsl:text>;</xsl:text>
</xsl:for-each>
<xsl:apply-templates select="role"/>
<xsl:apply-templates select="group"/>
</xsl:template>
<xsl:template match="group">
<xsl:for-each select=".">
<xsl:value-of select="name"/>
<xsl:text>;</xsl:text>
</xsl:for-each>
<xsl:apply-templates select="role"/>
</xsl:template>
<xsl:template match="role">
<xsl:for-each select=".">
<xsl:value-of select="name"/>
<xsl:text>;</xsl:text>
</xsl:for-each>
</xsl:template>
【问题讨论】:
-
输入 XML 中是否总是只有一个用户?