我从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>
答案 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