2013-01-23 122 views
0

什麼是可能不僅包含純文本,但一些XML節點以及測試填充的XElement的最好方法XML節點的一些文字填充的XElement?最佳實踐與containes內

例如,該代碼

XElement el = new XElement("XML_NODE"); 
el.Value = "some text <TAG>with custom tag value</TAG>"; 
string xml = el.ToString(); 

將返回XML作爲<XML_NODE>some text &lt;TAG&gt;with custom tag value&lt;/TAG&gt;</XML_NODE>。我明白髮生了什麼,爲什麼發生。但它不完全是我想要的......我希望得到類似於這個<XML_NODE>some text <TAG>with custom tag value</TAG></XML_NODE>的xml,其中沒有引用內部括號。

期望的結果可以通過下面的代碼

XElement el2 = XElement.Parse("<XML_NODE>some text <TAG>with custom tag value</TAG></XML_NODE>"); 
xml = el2.ToString(); 

來實現,但是我不喜歡這個想法,建立XML作爲一個字符串,後來解析它。

是否有其他更好的方法來得到它?

+0

我不認爲這是一個更好的辦法。 –

回答

3

另一種方法可能會略微高效:

static IEnumerable<XNode> ParseNodes(string value) 
{ 
    var settings = new XmlReaderSettings 
    { 
     ConformanceLevel = ConformanceLevel.Fragment 
    }; 

    using (var sr = new StringReader(value)) 
    using (var xr = XmlReader.Create(sr, settings)) 
    { 
     xr.Read(); 
     while (xr.ReadState != ReadState.EndOfFile) 
     { 
     yield return XNode.ReadFrom(xr); 
     } 
    } 
} 

string text = "some text <TAG>with custom tag value</TAG>"; 
var node = new XElement("XML_NODE", ParseNodes(text)); 
1

正如我在我的評論說,確實沒有更好的辦法。但是,你可以封裝這個「不那麼好」有點辦法:

public IEnumerable<XNode> ParsePartial(string partialXml) 
{ 
    return XElement.Parse(string.Format("<tmp>{0}</tmp>", partialXml)).Nodes(); 
} 

var el3 = new XElement("XML_NODE", 
         ParsePartial("some text <TAG>with custom value</TAG>")); 
+0

嗯...我認爲這是更好的......至少我喜歡它更:)爲什麼我沒想到這件事從一開始?非常感謝! ;) –