2016-07-04 47 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