2016-01-20 23 views
2
價值

我的方法接收XML字符串作爲輸入,我需要用XElement把這個XML字符串轉換爲XML信封:組XML作爲的XElement

input:      <hello>Hello!</hello> 
expected result: <envelope><hello>Hello!</hello></envelope> 

的問題是,這種代碼:

string xmlHello = "<hello>Hello!</hello>"; 
XElement xelem = new XElement("envelope", xmlHello); 

逃脫所有<>,這樣結果是:

<envelope>&lt;hello&gt;Hello!&lt;/hello&gt;</envelope> 

有任意t方式o禁用XElement構造函數的這種行爲能夠接受XML作爲值?輸入字符串可能真的很大,所以我想避免解析它。

+0

爲什麼你需要禁用此值的逃避?什麼時候會包含''子字符串?它會破壞你的XML如果不會被轉義。 –

+0

@AndyKorneyev你是對的,那會是一個問題。但是,我檢查輸入字符串是否遵循可能的XSD模式之一,因此不存在''子字符串的風險。 – vojta

+0

@AndyKorneyev不幸的是,這個檢查是由系統的不同模塊完成的,所以我的方法不會收到解析的XML,只是一個普通的字符串。 – vojta

回答

3

正如評論中所述,這不能直接完成,因爲API無法知道您的文本實際上是格式良好的XML,除非您通過它知道它是XML元素。

所以你需要做的是第一解析您的XML:

string xmlHello = "<hello>Hello!</hello>"; 

var hello = XElement.Parse(xmlHello); 

var envelope = new XElement("envelope", hello); 

結果造成:

<envelope> 
    <hello>Hello!</hello> 
</envelope>