我正在使用一个使用“xsl 方法:xml”来创建 html 模板的网站。但是,当 xsl 引擎呈现 html 页面时,我遇到了标签自动关闭的问题。
<div></div>
转换为 =><div/>
由于方法需要保留 xml,否则页面的其他组件将无法正确呈现,这一事实使这个问题更加复杂。
关于如何告诉 xsl 为节点做一个特殊例外的任何想法<div>
?
这个问题和这个问题类似,只是我想保留method:xml。 XSLT 自闭标签问题
我正在使用一个使用“xsl 方法:xml”来创建 html 模板的网站。但是,当 xsl 引擎呈现 html 页面时,我遇到了标签自动关闭的问题。
<div></div>
转换为 =><div/>
由于方法需要保留 xml,否则页面的其他组件将无法正确呈现,这一事实使这个问题更加复杂。
关于如何告诉 xsl 为节点做一个特殊例外的任何想法<div>
?
这个问题和这个问题类似,只是我想保留method:xml。 XSLT 自闭标签问题
默认情况下,method=xml 不可用。您可以通过以下几种方式处理它:
选项 1 - 切换到 method=xhtml
如果你不能切换到method=xml,并且你使用的是XSLT 2.0 解析器,也许你可以试试method=xhtml?
<xsl:output method="xhtml" indent="yes" />
这将使您的结束标签被呈现。
选项 2 - 将空格添加到“div”标签
或者,只需添加<xsl:text> </xsl:text>
(标签之间有一个空格)以使您<div>
不为空(当然,如果您可以使用空格)。
考虑以下 XML:
<div></div>
当转换为:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- output is xml -->
<xsl:output method="xml" indent="yes" />
<xsl:template match="div">
<div>
<!-- note space here -->
<xsl:text> </xsl:text>
<xsl:value-of select="text()" />
</div>
</xsl:template>
</xsl:stylesheet>
它产生输出:
<?xml version="1.0" encoding="UTF-8"?>
<div> </div>
我有同样的问题。问题是 XmlTextWriter 只会弄乱 html。试试下面的代码:
public static string Transform(string xmlPath, string xslPath, XsltArgumentList xsltArgumentList)
{
string rc = null;
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
XPathDocument myXPathDoc = new XPathDocument(xmlPath);
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(xslPath, new XsltSettings(true, true), null);
myXslTrans.Transform(myXPathDoc, xsltArgumentList, ms);
ms.Position = 0;
using (System.IO.TextReader reader = new System.IO.StreamReader(ms, Encoding.UTF8))
{
rc = reader.ReadToEnd();
}
}
return rc;
}
我使用 XsltArgumentList 将信息传递给 xslt。如果您不需要将参数传递给您的 xslt,您可以像这样调用该方法:
string myHtml = Transform(myXmlPath, myXslPath, new XsltArgumentList());