使用C#在制表符分隔的文本文件中的CDATA中获取值

时间:2018-07-25 14:01:25

标签: c# xml cdata

我在列中有一个字符串值,就像在制表符分隔的文本文件中一样,想要在其中提取“ John Smith”中的值并将其存储为字符串值。我尝试使用string.Replace,但不确定我有正确的实现方法。

     string cdatastring = "<![CDATA[John Smith]]>";
     string expected = "John Smith"; 

如何使用C#/。NET方法实现它?

1 个答案:

答案 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上,则您可以抓取ChainedTextReaderpublic 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的工作示例。