XSLT转换禁用输出转义的问题

时间:2008-12-29 15:47:33

标签: c# xslt escaping

我有一个xml,其中我已经在这样的评论下存储了一些html

 <root> 
   <node>
     <!-- 
            <a href="mailto:some@one.com"> Mail me </a>
      -->
</node>
</root>

现在在我的Transform Xslt代码中,我给XPathNavigator指向节点,在xslt中我将注释值作为参数传递。

假设$ href为<a href="mailto:some@one.com"> Mail me </a>

在xslt我正在做<xsl:value-of select="$href" disable-output-escaping="yes">

但是$ href仍然被转义,xslt转换的结果出现了&lt; &GT;

有没有人知道它的错误在这方面的任何帮助都会得到很高的评价。

由于 问候 Azeem

3 个答案:

答案 0 :(得分:2)

当节点的一部分失去其特殊含义时 - 因此“href”不是一个节点,所以你不能用它来选择东西。

您可以选择以下评论:

<xsl:template match="/">
<xsl:value-of select="/root/node/comment()" disable-output-escaping="yes"/>
</xsl:template>

这将根据您的XML输入生成:

cristi:tmp diciu$ xsltproc test.xsl test.xml 
<?xml version="1.0"?>

        <a href="mailto:some@one.com"> Mail me </a>

答案 1 :(得分:1)

正如diciu所提到的,曾经评论过里面的文本不再是XML解析的。

这个问题的一个解决方案是使用两遍方法。一次通过取出注释的<a href=""></a>节点并将其放入普通XML,第二次通过以使用所需的输出丰富数据:<a href="">Your Text Here</a>

第二种单通方法是通过正则表达式(或者在我们的情况下只是从XML中提取)从注释中提取所需的文本(在本例中为电子邮件地址),然后创建标记需要它周围。

<xsl:template match="ahrefmail/comment()">
    <xsl:element name="a">
        <xsl:attribute name="href" select="../../mail"/>
        <xsl:attribute name="class" select="'text'"/>
        <xsl:text>Mail Me!</xsl:text>
    </xsl:element>
</xsl:template>

这假设您已经有identity template

答案 2 :(得分:-1)

我确实尝试了你刚刚说的没用的xml我正在使用的是

<?xml version="1.0" ?>
  <root>
    <institution id="1">
        <data>
        <ahrefmail>
            <!--
        <a href='mailto:ibank@abibbankuk.com' class='text'></a>
             -->
        </ahrefmail>

        <mail>
            ibank@abibbankuk.com
        </mail>
        </data>
    </institution>


    <institution id="2">
        <data>
        <ahrefmail>
            <!--
        <a href='mailto:ibank@abibbankuk2.com' class='text'></a>
        -->
        </ahrefmail>

        <mail>
            ibank@abibbankuk2.com
        </mail>
        </data>
    </institution>

</root>

在xslt我正在做

其中$ id作为参数== 1传递 ahrefmail节点仍然使用lt&amp; amp;进行转义GT

由于 问候 Azeem