我正在尝试转换以下Xsl样式表。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/TestPage" xml:space="preserve" >
<ul>
<li class="first complete-tab">
<i class="fa fa-check-circle"></i>Step 1
</li>
<li class="active">
<i class="fa fa-pencil"></i>Step 2
</li>
<li class="last">Step 3</li>
</ul>
</xsl:template>
</xsl:stylesheet>
我正在使用的代码如下。
class Program
{
static void Main(string[] args)
{
string xslFile = "C:\\Projects\\Test.xsl";
XmlDocument doc = new XmlDocument();
XmlElement rootElement = doc.CreateElement("TestPage");
doc.AppendChild(rootElement);
string result = TransformDoc(doc, xslFile);
}
private static string TransformDoc(XmlDocument doc, string transformPath)
{
return TransformDoc(doc.CreateNavigator(), transformPath);
}
static string TransformDoc(XPathNavigator nav, string transformPath, XsltArgumentList args = null)
{
StringBuilder buffer = new StringBuilder();
string result = "A transformation Error Has Occurred";
using (StringWriter stringWriter = new StringWriter(buffer))
using (XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter))
{
XslCompiledTransform oTransform = new XslCompiledTransform();
XsltSettings oSettings = new XsltSettings(false, true);
oTransform.Load(transformPath, oSettings, null);
if (args == null)
oTransform.Transform(nav, xmlWriter);
else
oTransform.Transform(nav, args, xmlWriter);
result = buffer.ToString();
}
return result;
}
}
上面的代码转换了Xsl文件,但是我发现我没有得到所需的输出。
结果是
<ul>
<li class="first complete-tab">
<i class="fa fa-check-circle" />Step 1
</li>
<li class="active">
<i class="fa fa-pencil" />Step 2
</li>
<li class="last">Step 3</li>
</ul>
对于<i class="fa fa-check-circle"></i>Step 1
,我收到以下<i class="fa fa-check-circle" />
因为关闭了代码而导致我的显示失效。
答案 0 :(得分:1)
如果样式表使用xsl:output元素,则输出类型为 一个XmlWriter对象,你应该使用 创建时的XslCompiledTransform.OutputSettings属性 XmlWriter对象。 XslCompiledTransform.OutputSettings属性 返回包含派生信息的XmlWriterSettings对象 来自已编译样式表的xsl:output元素。这个 可以将XmlWriterSettings对象传递给XmlWriter.Create方法 使用正确的设置创建XmlWriter对象。
所以,你需要在这里使用XmlWriter
并在创建时将OutputSettings传递给它...
static string TransformDoc(XPathNavigator nav, string transformPath, XsltArgumentList args = null)
{
StringBuilder buffer = new StringBuilder();
string result = "A transformation Error Has Occurred";
XslCompiledTransform oTransform = new XslCompiledTransform();
XsltSettings oSettings = new XsltSettings(false, true);
oTransform.Load(transformPath, oSettings, null);
using (StringWriter stringWriter = new StringWriter(buffer))
using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, oTransform.OutputSettings))
{
if (args == null)
oTransform.Transform(nav, xmlWriter);
else
oTransform.Transform(nav, args, xmlWriter);
result = buffer.ToString();
}
return result;
}