Xsl 转换将 <i></i> 更改为 <i />
Xsl Transformation Changes <i></i> to <i />
我正在尝试转换以下 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" />
,由于标签关闭,我的显示中断了。
If your style sheet uses the xsl:output element and the output type is
an XmlWriter object, you should use the
XslCompiledTransform.OutputSettings property when you create the
XmlWriter object. The XslCompiledTransform.OutputSettings property
returns an XmlWriterSettings object that contains information derived
from the xsl:output element of a compiled style sheet. This
XmlWriterSettings object can be passed to the XmlWriter.Create method
to create an XmlWriter object with the correct settings.
因此,您需要在此处使用 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;
}
我正在尝试转换以下 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" />
,由于标签关闭,我的显示中断了。
If your style sheet uses the xsl:output element and the output type is an XmlWriter object, you should use the XslCompiledTransform.OutputSettings property when you create the XmlWriter object. The XslCompiledTransform.OutputSettings property returns an XmlWriterSettings object that contains information derived from the xsl:output element of a compiled style sheet. This XmlWriterSettings object can be passed to the XmlWriter.Create method to create an XmlWriter object with the correct settings.
因此,您需要在此处使用 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;
}