簡體   English   中英

Xslt未轉義的輸出

[英]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="/">
    &lt;
    <xsl:text>&lt;</xsl:text>
    <xsl:text disable-output-escaping="yes ">&lt;</xsl:text>
    <xsl:variable name="break" select="'&lt;'"/>
    <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM