2016-07-04 48 views
0

我怎样才能得到撒克逊到CDATA字符串转换为XdmNode没有逃脱< &>?如何获得撒克逊输出非转义CDATA节

这里是我的 '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进行转义?

回答

0

你说的代码转换

<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> 

会产生这样的输出提供你转换输出发送到串行(而不是,例如,一个XdmNode)。

+0

这似乎与我们所使用的串行器的问题。如果变换的输出使用Saxon * Serializer *类,则字符串是正确的。如果变换输出到XdmNode,并且随后串行化使用.NET *的XmlWriter *串行器,然后我得到上述的问题。 – Neil

+0

绝对如此。这就是禁用输出转义的原因;只有在XSLT转换引擎和串行器之间有非常紧密的耦合时才能使其工作。 –

+0

所以,你说,如果我在变换它的工作原理,但如果我以后连载的输出,这是行不通的连载? – Neil