如何让Saxon输出未转义的CDATA部分

时间:2016-07-04 16:10:26

标签: c# xml saxon

如何让Saxon将CDATA字符串转换为XdmNode而不转义< &安培; > ?

这是我的ToXdmNode'功能:

        Processor processor = xxx.GetProcessor();
        var builder = processor.NewDocumentBuilder();

        builder.BaseUri = xxx.BaseUri;
        var tr = new StringReader("<stuff><![CDATA[<blah>]]></stuff>");
        var node = builder.Build(tr);

此代码转换

<stuff><![CDATA[<blah>]]></stuff>

进入一个看起来像的XdmNode:

<stuff>&lt;blah&gt;</stuff>

当我将OuterXml发送到下一步时,这会导致问题。

如何让我的XdmNode不被转义?

1 个答案:

答案 0 :(得分:1)

你说代码转换

<stuff><![CDATA[<blah>]]></stuff>

进入一个看起来像的XdmNode:

<stuff>&lt;blah&gt;</stuff>

但实际上这不是转换:这两件事只是同一内容的不同序列化。

如果要创建非格式良好的字符串

<stuff><blah></stuff>

然后使用XSLT很棘手,因为不是XML,这不是任何有效XDM节点的序列化。但是,您可以在disable-output-escaping的帮助下设计它。例如转型

<xsl:template match="stuff">
  <xsl:copy>
    <xsl:value-of select="." disable-output-escaping="yes"/>
  </xsl:copy>
</xsl:template>

将生成此输出,前提是您将转换输出发送到Serializer(而不是,例如,发送到XdmNode)。