美好的一天。首先,让我警告你:我对XML的了解是基本的,所以我可能在我的研究中找到了正确的答案,而不知道如何应用它。
我目前有一些C#代码,它们读取国家气象服务XML文件,并在元素中查找文本以确定是否有天气警报。这是有效的,但我更倾向于测试另一个元素的存在,然后使用它的文本将警报写入网页。带有警告的XML文件示例如下:http://www.co.frederick.va.us/dev/scrapewarning.xml。我想测试<cap:event>
是否存在,然后使用其文本填充网页上的文字。
这就是我现在正在做的事情:
// Create an instance of XmlReader with the warning feed and then load it into a SyndicationFeed.
XmlReader reader = XmlReader.Create(strWarningFeed);
SyndicationFeed feed = SyndicationFeed.Load(reader);
// Read through the XML, pull out the items we need depending on whether or not there is a warning.
foreach (var str in feed.Items)
{
if (str.Title.Text.Contains("no active"))
{
weatherWarning.Visible = false;
}
else
{
string strTitle = str.Title.Text;
string strId = str.Id.ToString();
strTitle = strTitle.Substring(0, strTitle.LastIndexOf("issued"));
litOut.Text += String.Format("<p class=\"warningText\">{0}</p><p class=\"warningText\"><a href=\"{1}\">Read more.</a></p>", strTitle, strId);
}
}
因此,我不想看到标题包含“无效”,而是询问文档是否有一个名为<cap:event>
的元素,然后使用其文本。 Pseduocode:
foreach (var str in feed.Items)
{
if (<cap:event> doesn't exist)
{
weatherWarning.Visible = false;
}
else
{
string strTitle = <cap:event>.Text;
}
}
如果您需要更多信息,请与我们联系。在此先感谢您的帮助。
答案 0 :(得分:0)
使用linq to xml检查是否存在(以及任何现有值)更容易。如果将xml加载到XDocument中,则可以使用linq的优点来查询元素和后代。没有在IDE前面或者能够非常仔细地查看该示例xml,类似于doc.Descendants(&#34; weather&#34;)。其中(e =&gt; e.Element(&#34;事件&#34;)==&#34;无论&#34;)。
答案 1 :(得分:0)
我相信你缺少名称空间管理器。以下是代码如何与XmlDocument一起使用:
var xmlDoc = new XmlDocument();
xmlDoc.Load(@"http://www.co.frederick.va.us/dev/scrapewarning.xml");
var nsm = new XmlNamespaceManager(xmlDoc.NameTable);
nsm.AddNamespace("s", "http://www.w3.org/2005/Atom");
nsm.AddNamespace("cap", "urn:oasis:names:tc:emergency:cap:1.1");
var nodes = xmlDoc.SelectNodes("//s:entry[cap:event]", nsm);