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标签的内容。
任何人都可以帮我吗?
答案 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();