C# - 如何从 xml 中获取特定值
Posted
技术标签:
【中文标题】C# - 如何从 xml 中获取特定值【英文标题】:C# - how to get a specific value from a xml 【发布时间】:2020-02-25 22:51:09 【问题描述】:我知道这个问题被问了很多,但我找不到适合我的问题。 我正在尝试使用他们的 RSS 提要从 BBC Weather 获取天气。 在这个 RSS 提要中,我试图获取第二个标题 (**) 的值。
Rss 提要:
<?xml version="1.0" encoding="UTF-8"?>
<rss>
<channel>
<title>BBC Weather - Observations for Hampstead, GB</title>
<link>https://www.bbc.co.uk/weather/2647553</link>
<description>Latest observations for Hampstead from BBC Weather, </description>
<language>en</language>
<copyright>Copyright: (C) British Broadcasting Corporation,</copyright>
<pubDate>Wed, 30 Oct 2019 14:00:00 GMT</pubDate>
<dc:date>2019-10-30T14:00:00Z</dc:date>
<dc:language>en</dc:language>
<dc:rights>Copyright: (C) British Broadcasting Corporation, </dc:rights>
<atom:link rel="self" />
<item>
**<title>Wednesday - 14:00 GMT: Not available, 11°C (52°F)</title>**
<link>https://www.bbc.co.uk/weather/2647553</link>
<description>Temperature: 11°C (52°F), Wind Direction: East South Easterly, Wind Speed: 13mph, Humidity: 58%, Pressure: 1023mb, Falling, Visibility: Excellent</description>
<pubDate>Wed, 30 Oct 2019 14:00:00 GMT</pubDate>
<guid isPermaLink="false">https://www.bbc.co.uk/weather/2647553-2019-10-30T14:00:00.000Z</guid>
<dc:date>2019-10-30T14:00:00Z</dc:date>
<georss:point>51.5574 -0.1821</georss:point>
</item>
</channel>
</rss>
我知道这是错的,但到目前为止我得到的是这样的:
XDocument X = XDocument.Load("https://weather-broker-cdn.api.bbci.co.uk/en/observation/rss/2647553");
var weather = X.Element("channel").Element("item").Element("title").Value;
weather = Regex.Match(weather, @"GMT: (.+?),").Groups[1].Value;
XmlLabel.Text = weather;
我真的找不到任何地方可以清楚地解释它, 提前致谢
【问题讨论】:
您可以使用 Xpath 来选择元素,为什么不同时查看pubDate
节点或 dc:Date
节点而不是尝试使用正则表达式进行解析,那么您可以获得实际的日期DateTime
数据类型?
@Charleh OP 似乎不在日期之后。见regex101.com/r/fBSb1l/1
【参考方案1】:
你的代码开始的层次太深了:
var weather = X.Element("channel").Element("item").Element("title").Value;
您需要从根元素开始,即“rss”。所以这会起作用:
var weather = X.Element("rss").Element("channel").Element("item").Element("title").Value;
但我建议使用较短的 XPath 变体:
X.XPathSelectElement("//item/title").Value;
我使用以下代码在Fiddle 中验证了上述两个变体和您的正则表达式:
XDocument X = XDocument.Load("https://weather-broker-cdn.api.bbci.co.uk/en/observation/rss/2647553");
var test = X.XPathSelectElement("//item/title").Value;
Console.WriteLine(Regex.Match(test, @"GMT: (.+?),").Groups[1].Value);
var weather = X.Element("rss").Element("channel").Element("item").Element("title").Value;
Console.WriteLine(Regex.Match(weather, @"GMT: (.+?),").Groups[1].Value);
输出:
无法使用 无法使用【讨论】:
以上是关于C# - 如何从 xml 中获取特定值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?