我不太明白如何在下面看到一个示例,转换成下面的表格格式。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<Form name="Sample Form">
<Prop title="Name">
<PropList type="list">
<Item value="Joe"></Item>
<Item value="Anna"></Item>
<Item value="Mark"></Item></PropList></Prop>
<Prop title="ID">
<PropList type="list">
<Item value="123"></Item>
<Item value="789"></Item>
<Item value="345"></Item></PropList></Prop>
<Prop title="Code">
<PropList type="list">
<Item value="WFUO"></Item>
<Item value="SOP"></Item>
<Item value="ASAP"></Item></PropList></Prop></Form>
想要输出:抱歉,我无法发布图片
Joe 123 WFUO
Anna 789 SOP
Mark 345 ASAP
我只能将它输出到一行或一行。如果你能提供帮助,请告诉我。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head><title>Sample Form</title></head>
<body>
<table border="1">
<tr>
<th>Name</th>
<th>ID</th>
<th>Code</th>
</tr>
<xsl:apply-templates select='Form/Prop/PropList/Item'/>
</table>
</body></html>
</xsl:template>
<xsl:template match="Prop">
<tr>
<td><xsl:value-of select="@value"/></td>
<xsl:apply-templates select='Form/Prop/PropList/Item'/>
</tr>
</xsl:template>
<xsl:template match="Item">
<tr>
<td><xsl:value-of select="@value"/></td>
<xsl:apply-templates select='Form/Prop/PropList/Item'/>
</tr>
</xsl:template>
</xsl:stylesheet>
在其他成员的帮助下获得新的更新代码:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="PropKey" match="Prop" use="@title" />
<xsl:template match="Form">
<html>
<head><title>Sample Form</title></head>
<body>
<table border="1">
<tr>
<th>Name</th>
<th>ID</th>
<th>Code</th>
</tr>
<xsl:apply-templates select='Prop'/>
</table>
</body></html>
</xsl:template>
<xsl:template match="Prop">
<xsl:variable name="thisGroup" select="key('PropKey', @title)"> </xsl:variable>
<xsl:value-of select="$thisGroup"/>
<xsl:if test="generate-id() = generate-id($thisGroup[1])">
<xsl:apply-templates select="PropList"/>
</xsl:if>
</xsl:template>
<xsl:template match="PropList">
<td>
<xsl:value-of select="Item/@value"/>
</td>
</xsl:template>
答案 0 :(得分:1)
您向我们展示的输出需要转动表格。一种更简单的方法会以现有方向显示表格:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Form">
<html>
<head><title>Sample Form</title></head>
<body>
<table border="1">
<xsl:apply-templates select='Prop'/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="Prop">
<tr>
<th><xsl:value-of select="@title"/></th>
<xsl:apply-templates select='PropList/Item'/>
</tr>
</xsl:template>
<xsl:template match="Item">
<td><xsl:value-of select="@value"/></td>
</xsl:template>
</xsl:stylesheet>
结果(已呈现)
正如我所说,如果你想改变桌子的方向,你必须更加努力地工作:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Form">
<html>
<head><title>Sample Form</title></head>
<body>
<table border="1">
<!-- header -->
<xsl:for-each select="Prop">
<th><xsl:value-of select="@title"/></th>
</xsl:for-each>
<!-- body -->
<xsl:for-each select="Prop[1]/PropList/Item">
<xsl:variable name="i" select="position()"/>
<tr>
<xsl:for-each select="/Form/Prop/PropList">
<td><xsl:value-of select="Item[$i]/@value"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
结果(已呈现)