将 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 中,附加到 ...
区域。
我得到的字符串格式如下。
<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.Parse(GetXmlString())
或 XDocument.Parse(GetXmlString())
时,我得到 There are multiple root elements 异常。
如何在不转义括号的情况下获得所需的输出?我错过了什么?
最简单的选择可能是给它一个根元素,然后将它解析为XML:
var doc = XDocument.Parse("<parent>" + text + "</parent>");
如果您需要附加到现有元素,您可以使用:
var elements = XElement.Parse("<parent>" + text + "</parent>").Elements();
existingElement.Add(elements);
乔恩建议的替代方法是为您的片段创建一个 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);
}
}
如果 'parent' 元素已经存在,这将很有用,否则在每一端简单连接 XML 节点和解析会更简单。
我从 string GetXmlString()
得到一个字符串;这是我无法改变的。
我必须将其附加到 new XElement ("parent" , ... );
内的 xml 中,附加到 ...
区域。
我得到的字符串格式如下。
<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.Parse(GetXmlString())
或 XDocument.Parse(GetXmlString())
时,我得到 There are multiple root elements 异常。
如何在不转义括号的情况下获得所需的输出?我错过了什么?
最简单的选择可能是给它一个根元素,然后将它解析为XML:
var doc = XDocument.Parse("<parent>" + text + "</parent>");
如果您需要附加到现有元素,您可以使用:
var elements = XElement.Parse("<parent>" + text + "</parent>").Elements();
existingElement.Add(elements);
乔恩建议的替代方法是为您的片段创建一个 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);
}
}
如果 'parent' 元素已经存在,这将很有用,否则在每一端简单连接 XML 节点和解析会更简单。