解析c#中包含cData的xml响应文本

时间:2012-03-29 05:31:28

标签: c# xml xml-parsing

我从xml格式的Web服务获得响应,数据在xml节点的cData部分内。现在当我试图提取节点值然后用cdata文本获取值。我怎样才能删除这个并在cdata中获取文本。请建议我这样做的最佳方式。现在写我正在使用正则表达式从结果值中删除cdata。在此先感谢。![CDATA [Xyz]]。

<ResumeParserData>
    <ResumeFileName><![CDATA[]]></ResumeFileName>
    <ParsingDate><![CDATA[3/29/2012 1:37:33 AM]]></ParsingDate>
    <TitleName><![CDATA[]]></TitleName>
    <FirstName><![CDATA[abc]]></FirstName>
    <Middlename><![CDATA[Kr]]></Middlename>
    <LastName><![CDATA[abc]]></LastName>
    <Email><![CDATA[xyz@gmail.com]]></Email>
    <Phone><![CDATA[+91 8527502445]]></Phone>
</ResumeParserData>

1 个答案:

答案 0 :(得分:7)

  

现在我使用正则表达式从结果值中删除cdata

好吧,我会停止使用正则表达式来解析XML。

使用XML API - 例如,LINQ to XML很可爱。这应该透明地让你得到文本,你甚至不必知道它曾经在CDATA部分,除非你真的想要。例如,使用如下XML文件:

<parent>
  <child>
    <![CDATA[Foo]]>
  </child>
</parent>

我们可以看到这样的文字:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        var doc = XDocument.Load("test.xml");
        var child = doc.Root.Element("child");
        var text = child.Value;
        Console.WriteLine("Text: {0}", text);
    }
}

编辑:稍微更改上面的代码:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        var doc = XDocument.Load("test.xml");
        foreach (var child in doc.Root.Elements())
        {
            Console.WriteLine("{0}: {1}",
                              child.Name, child.Value);
        }
    }
}

...当我在问题中的XML上运行时,我得到:

ResumeFileName:
ParsingDate: 3/29/2012 1:37:33 AM
TitleName:
FirstName: abc
Middlename: Kr
LastName: abc
Email: xyz@gmail.com
Phone: +91 8527502445