我认为自己仍然是xslt的新手,因为我到目前为止所做的只是使用templateobject和变量的基本操作并得到一个html输出。我正在进行复杂计算的学习步骤。我需要论坛专家帮助解决我的一个问题。
我正在构建电子邮件模板。下面是我要转换的xslt。 除此之外,我想将另一个xml传递给它,让xslt循环并获取要在html中各自位置分配的属性值。
下面的代码不起作用,只是举例说明我打算做什么。
XSLT
<Root>
<item ProductName="abc" Amount="$20" />
<item ProductName="xyz" Amount="$50" />
</Root>
XML
{{1}}
我尝试将xml作为字符串分配给xslt变量,并尝试使用document()函数在XSLT中创建文档,但仍然无法遍历元素和属性。
感谢您对此的任何帮助
其他几个问题: - 我可以通过在标题上声明命名空间,通过c#为xslt分配多个xml来嵌套xsl:template吗? - 可以在xslt中从字符串转换为xml吗?
答案 0 :(得分:1)
以下是完整的工作示例:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:param name="pPath" select="'file:///c:/temp/delete/products.xml'"/>
<xsl:variable name="vdocProducts" select="document($pPath)"/>
<xsl:template match="/body">
<html>
<body bgcolor="#E5E5E5" leftmargin="0" marginwidth="0" topmargin="0"
marginheight="0" offset="0">
<table style="width:100%;" class="orderItems">
<xsl:apply-templates select="$vdocProducts/*/item"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<tbody>
<tr>
<td class="itemThumbnail" style="width:80px; height:70px; padding-top:20px;">
<img src="ref" alt="" />
</td>
<td style="padding-top:20px; font-family:Arial, Verdana, Helvetica, sans-serif; font-size: 16px; line-height: 20px; color:#4c4c4c;">
<xsl:value-of select="@ProductName" /><br />
Quantity: 1
</td>
<td style="text-align:right; font-family:Arial, Verdana, Helvetica, sans-serif; font-size: 16px; line-height: 20px; color:#4c4c4c;">
Price: <strong style="font-size:20px; color:#b9277e;">
<xsl:value-of select="@Amount" />
</strong>
</td>
</tr>
</tbody>
</xsl:template>
</xsl:stylesheet>
这里有一个(未指定的)源XML文档:
<body/>
并且提供的XML文档驻留在文件系统中,其文件URI是全局参数$pPath
的值。
在这种情况下,XML文档位于c:\temp\delete\products.xml
:
<Root>
<item ProductName="abc" Amount="$20" />
<item ProductName="xyz" Amount="$50" />
</Root>
对(未指定的单元素)源XML文档应用转换时,生成所需结果:
<html>
<body bgcolor="#E5E5E5" leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0">
<table style="width:100%;" class="orderItems">
<tbody>
<tr>
<td class="itemThumbnail" style="width:80px; height:70px; padding-top:20px;"><img src="ref" alt=""></td>
<td style="padding-top:20px; font-family:Arial, Verdana, Helvetica, sans-serif; font-size: 16px; line-height: 20px; color:#4c4c4c;">abc<br>
Quantity: 1
</td>
<td style="text-align:right; font-family:Arial, Verdana, Helvetica, sans-serif; font-size: 16px; line-height: 20px; color:#4c4c4c;">
Price: <strong style="font-size:20px; color:#b9277e;">$20</strong></td>
</tr>
</tbody>
<tbody>
<tr>
<td class="itemThumbnail" style="width:80px; height:70px; padding-top:20px;"><img src="ref" alt=""></td>
<td style="padding-top:20px; font-family:Arial, Verdana, Helvetica, sans-serif; font-size: 16px; line-height: 20px; color:#4c4c4c;">xyz<br>
Quantity: 1
</td>
<td style="text-align:right; font-family:Arial, Verdana, Helvetica, sans-serif; font-size: 16px; line-height: 20px; color:#4c4c4c;">
Price: <strong style="font-size:20px; color:#b9277e;">$50</strong></td>
</tr>
</tbody>
</table>
</body>
</html>
<强>更新强>:
在样式表XML树中使用embedded:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common" xmlns:my="my:my" exclude-result-prefixes="my ext">
<xsl:output method="html" omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:variable name="vrtfdocProducts">
<Root>
<item ProductName="abc" Amount="$20" />
<item ProductName="xyz" Amount="$50" />
</Root>
</xsl:variable>
<xsl:variable name="vdocProducts" select="ext:node-set($vrtfdocProducts)"/>
<xsl:template match="/body">
<html>
<body bgcolor="#E5E5E5" leftmargin="0" marginwidth="0" topmargin="0"
marginheight="0" offset="0">
<table style="width:100%;" class="orderItems">
<xsl:apply-templates select="$vdocProducts/*/item"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<tbody>
<tr>
<td class="itemThumbnail" style="width:80px; height:70px; padding-top:20px;">
<img src="ref" alt="" />
</td>
<td style="padding-top:20px; font-family:Arial, Verdana, Helvetica, sans-serif; font-size: 16px; line-height: 20px; color:#4c4c4c;">
<xsl:value-of select="@ProductName" /><br />
Quantity: 1
</td>
<td style="text-align:right; font-family:Arial, Verdana, Helvetica, sans-serif; font-size: 16px; line-height: 20px; color:#4c4c4c;">
Price: <strong style="font-size:20px; color:#b9277e;">
<xsl:value-of select="@Amount" />
</strong>
</td>
</tr>
</tbody>
</xsl:template>
</xsl:stylesheet>