从字符串中获取XML数据

时间:2016-01-19 16:15:14

标签: c# asp.net xml

string xml = "<ABCProperties> <Action> Yes | No | None </Action><Content>
<Header> Header Text </Header><Body1> Body Paragraph 1 </Body1>
<BodyN> Body Paragraph N</BodyN></Content><IsTrue> true | false </IsTrue>
<Duration> Long | Short </Duration></ABCProperties>";

在这里,我想从XML中提取某些字符串。 首先是Header标签中的Header Text。

什么时候,我试试

XDocument doc = XDocument.Parse(xml);
var a = doc.Descendants("Header").Single();

我得到变量a = <Header> Header Text </Header>。我怎样才能获得var a = Header Text

其次,我希望得到所有Body paragrahs的文本。它可以是Body1,Body2或BodyN。如何获取所有Body标签的内容。

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:3)

您要求提供Header 元素 - 以便它能为您提供所需内容。如果您只想要文本,可以使用:

var headerText = doc.Descendants("Header").Single().Value;

要查找所有正文标记,只需使用Where子句:

var bodyText = doc.Descendants()
                  .Where(x => x.Name.LocalName.StartsWith("Body"))
                  .Select(x => x.Value);

答案 1 :(得分:0)

首先获取内容节点,这是您真正想要的,然后遍历其子节点检查它是否是正文或标题节点,并使用string.Trim()函数去掉前导/尾随空格:

string xml = @"<ABCProperties> <Action> Yes | No | None </Action><Content>
<Header> Header Text </Header><Body1> Body Paragraph 1 </Body1>
<BodyN> Body Paragraph N</BodyN></Content><IsTrue> true | false </IsTrue>
<Duration> Long | Short </Duration></ABCProperties>";

XDocument doc = XDocument.Parse(xml);

XElement content = doc.Root.Element("Content");

foreach (XElement el in content.Elements())
{
    string localName = el.Name.LocalName;

    if (localName == "Header")
    {
        Console.WriteLine(localName + ": " + el.Value.Trim());
    }
    else if (localName.StartsWith("Body"))
    {
        Console.WriteLine(localName + ": " + el.Value.Trim());
    }
}

Console.ReadKey();