【问题标题】:Parse xml response text having cData in c#在 c# 中解析具有 cData 的 xml 响应文本
【发布时间】:2012-03-29 05:31:27
【问题描述】:

我正在从 web 服务以 xml 格式获得响应,并且数据位于 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>

【问题讨论】:

  • - -
  • @Anu - 你能告诉我们你目前用来解析它的代码吗?显示 xml 数据很好,但如果您不向我们展示您正在尝试的内容,我们将无法帮助您调试 cdata 问题:)

标签: c# xml xml-parsing


【解决方案1】:

现在我正在使用正则表达式从结果值中删除 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

【讨论】:

  • 但我的文本中仍然有 cdata。
  • @Anu:很难知道你做错了什么,因为你没有用你现在正在尝试的内容更新你的问题。
  • @Anu - 如果它有帮助,因为你提到这是一个网络响应,如果你已经有字符串,你将使用 XDocument.Parse 代替(加载用于从文件加载,如乔恩表演)
  • @JamesManning:或者Stream,更适合网络回复:XDocument.Load(webResponse.GetResponseStream())
  • code abv 工作但是当我用实际尝试这个然后失败。当我看到我的回复为文本时,我发现 <在 cdata 之前和之后是因为这个而发生的。 <![CDATA[]]><![CDATA[]]><![CDATA[xyz]]><![CDATA[Kr]]> <![CDATA[abc]]><![CDATA[xyz@gmail.com]]><! [CDATA[+91 123456789]]>电话>
猜你喜欢
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2021-06-07
相关资源
最近更新 更多