[英]How can a C# XSLT extension function return an XML fragment that gets used as unescaped XML?
[英]Xslt unescaped output
好的,我無法使disable-output-escapeing屬性起作用。 這是我的最小示例:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<
<xsl:text><</xsl:text>
<xsl:text disable-output-escaping="yes "><</xsl:text>
<xsl:variable name="break" select="'<'"/>
<xsl:copy-of select="$break"/>
<xsl:value-of select="$break" disable-output-escaping="yes"/>
<xsl:value-of select="$break" disable-output-escaping="no"/>
</xsl:template>
</xsl:stylesheet>
我在C#應用程序中使用.Net處理器:
static void RunXslt(string xml)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
XslTransform myXslTransform = new XslTransform();
XmlTextWriter writer = new XmlTextWriter("C:\\output", null);
Stream xsltStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("myProject.mytransform.xslt");
XmlReader xsltReader = XmlReader.Create(xsltStream);
myXslTransform.Load(xsltReader);
myXslTransform.Transform(xmlDocument, null, writer);
writer.Flush();
writer.Close();
}
我得到的只是&lt; 代替<
我在這里做錯了什么?
我懷疑是因為您使用XmlWriter作為目標,所以序列化(因此進行轉義)是由XmlWriter而不是轉換引擎完成的,並且XmlWriter不知道disable-output-escapeing。 (這就是不贊成使用doe的原因...)
我不太了解.net處理器,但是可能有某種方法可以將輸出發送到字節流,以便轉換引擎負責序列化和轉義。
一陣子我遇到了同樣的問題,並且由於收到各種各樣的XML文件(從出色的設計到不太出色),並且.NET不支持開箱即用,因此我決定購買一個庫。
有兩種選擇:Altova XML和Saxon。
我認為Microsoft沒有計划在C#中支持XSLT2.0,因此,如果您要使用XSLT 2.0(或3.0),則必須投資兩個庫之一,或者構建自己的庫-我不會推薦。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.