我在列中有一个字符串值,就像在制表符分隔的文本文件中一样,想要在其中提取“ John Smith”中的值并将其存储为字符串值。我尝试使用string.Replace,但不确定我有正确的实现方法。
string cdatastring = "<![CDATA[John Smith]]>";
string expected = "John Smith";
如何使用C#/。NET方法实现它?
答案 0 :(得分:0)
您可以使用LINQ to XML方法XElement.Parse()
来解析任何格式正确的XML文档,但是您的CDATA字符串<![CDATA[John Smith]]>
并不是格式正确的XML文档,它只是一个文档< em> fragment ,因为它缺少root element。要将其转换为格式正确的XML,您可以将其用合成的根元素包围,对其进行解析,然后像这样提取value:
var value = XElement.Parse("<a>" + cdatastring + "</a>").Value;
如果您的cdatastring
超过42,000个字符左右,并且带有添加的根元素的字符串将继续出现在large object heap上,则您可以抓取ChainedTextReader
和public static TextReader Extensions.Concat(this TextReader first, TextReader second)
从How to string multiple TextReaders together?到Rex M的答案中,创建以下扩展方法:
public static class XmlExtensions
{
public static XElement ParseFragment(string xmlFragment)
{
using (var reader = new StringReader("<a>").Concat(new StringReader(xmlFragment)).Concat(new StringReader("</a>")))
{
return XElement.Load(reader);
}
}
}
然后像这样提取您的CDATA值:
var value = XmlExtensions.ParseFragment(cdatastring).Value;
.net小提琴here的工作示例。