任何人都可以将我的一些XML转换为HTML。我以前从事过XSLT转换,但从不从头开始,我似乎错过了一些东西。
从XML开始,就像这样:
<order name="fred" value="123.45">
<lines>
<line description="foo" value="123"/>
<line description="bar" value="0.45"/>
</lines>
</order>
...和一个如下所示的XSLT文件:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:decimal-format name="sterling" decimal-separator="." grouping-separator=","/>
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<xsl:apply-templates select="order"/>
</head>
<body>
<table border="2">
<xsl:apply-templates select="order/lines/line"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="order">
Name is '<xsl:value-of select="@name"/>' and value is <xsl:value-of select="format-number(@value, '£#,###.00', 'sterling')"/>
</xsl:template>
<xsl:template match="order/lines/line">
<tr>
<td>
<xsl:value-of select="@description"/>
</td>
<td>
<xsl:value-of select="@value"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
当我使用C#中的XslCompiledTransform对象进行转换时,我获得了基本的html但没有内容。我用于转换的代码如下:
private static String GetHtml(String xml)
{
String result;
var doc = new XmlDocument();
doc.LoadXml(xml);
var transformer = new XslCompiledTransform(true);
transformer.Load("foobar.xslt");
using (var writer = new StringWriter())
{
transformer.Transform(doc, null, writer);
result = writer.ToString();
}
return result;
}
非常感谢任何帮助。
罗斯
(顺便说一下,如果在使用format-number函数时,我必须提供格式字符串,那么xsl:decimal-format元素的意义是什么?)
答案 0 :(得分:1)
这绝不会被使用,因为没有名为attribute
的{{1}}或element
:
fred
您需要以下内容:
<xsl:template match="fred">
同样,调用此属性的<xsl:template match="@name">
部分需要更改为:
apply-templates
根据您发布的XML结构,您需要在XSLT中将每次提及<xsl:apply-templates select="@name"/>
更改为fred
。
答案 1 :(得分:1)
您希望呈现到HTML HEAD中的内容看起来无效。
Oded是正确的,源文档中没有fred元素,只有一个属性值为fred。
您的其中一个模板还提到了在源XML中不存在的“申请单”。
<xsl:template match="/">
<html>
<head>
<title><xsl:apply-templates select="order"/></title>
</head>
<body>
<table border="2">
<xsl:apply-templates select="order/lines/line"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="order">
Name is '<xsl:value-of select="@name"/>' and value is <xsl:value-of select="format-number(@value, '£#,###.00', 'sterling')"/>
</xsl:template>
<xsl:template match="line">
<tr>
<td>
<xsl:value-of select="@description"/>
</td>
<td>
<xsl:value-of select="@value"/>
</td>
</tr>
</xsl:template>
干编码,ymmv。