簡體   English   中英

將xml字符串傳遞給System.Xml.Linq.XElement時,避免使用尖括號將xml轉義

[英]Avoid xml escaping of angle brackets, when passing xml string to System.Xml.Linq.XElement

我從string GetXmlString()得到一個字符串; 這我不能改變。

我必須將此附加到new XElement ("parent" , ... );的xml中new XElement ("parent" , ... ); ,到...區域。

我得到的該字符串具有以下格式。

<tag name="" value =""></tag>
<tag name="" value =""></tag>
<tag name="" value =""></tag>
...

我想要的最終結果是這樣

<parent>
<tag name="" value =""></tag>
<tag name="" value =""></tag>
<tag name="" value =""></tag>
<tag name="" value =""></tag>
<tag name="" value =""></tag>
...
</parent>

當我僅將字符串作為XElement("root", GetXmlString())傳遞時XElement("root", GetXmlString()) <>編碼為&lt; &gt

當我嘗試XElement.Parse(GetXmlString())XDocument.Parse(GetXmlString()) ,出現“ 存在多個根元素”異常。

我如何在不逃脫括號的情況下獲得所需的輸出? 我想念什么?

最簡單的選擇可能是它一個根元素,然后將其解析為XML:

var doc = XDocument.Parse("<parent>" + text + "</parent>");

如果需要附加到現有元素,則可以使用:

var elements = XElement.Parse("<parent>" + text + "</parent>").Elements();
existingElement.Add(elements);

Jon建議的替代方法是為您的片段創建一個XmlReader並從中進行解析:

var element = new XElement("parent");

var settings = new XmlReaderSettings
{
    ConformanceLevel = ConformanceLevel.Fragment
};

var text = GetXmlString();

using (var sr = new StringReader(text))
using (var xr = XmlReader.Create(sr, settings))
{
    xr.MoveToContent();

    while (!xr.EOF)
    {
        var node = XNode.ReadFrom(xr);   
        element.Add(node);
    }
}

如果“父”元素已經存在,這將很有用,否則在兩端的XML節點的簡單串聯和解析將更加簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM