将节点从一个xml复制到另一个xml

时间:2014-02-08 17:41:59

标签: c# xml

我需要将节点从yahoo weather复制到我的本地xml文件。我得到了带有

所有属性的节点
XmlNode node = xdoc.SelectSingleNode("/rss/channel/item/yweather:condition", ns);

我不知道如何在我的本地data.xml文件中编写相同的节点?所以每次启动应用程序时,我都希望在本地xml中编写节点。因为yahoo中的节点像一小时一样更新,我还想检查本地xml中最后一个节点的值是否与雅虎天气相同,在这种情况下不要写下来。我的xml就像:

<condition  text="Cloudy"  temp="4"  date="Thu, 06 Feb 2014 4:00 pm CET" />
<condition  text="Cloudy"  temp="3"  date="Thu, 06 Feb 2014 6:00 pm CET" />

等。我不想要重复。我该怎么办?

2 个答案:

答案 0 :(得分:1)

使用Linq-To-Xml:

XElement rss = XElement.Parse("string xml feed");
XNamespace ns = "http://...";
XElement feed = rss.Descendants(ns + "condition").Last();

XElement file = XElement.Load("file");
XElement local = file.Descendants(ns + "condition").LastOrDefault();

if (feed.Attribute("date").Value != local.Attribute("date").Value)
    local.AddAfterSelf(feed);

file.Save("file");

您必须检查边缘情况,例如,如果您的文件为空,则在本地为null,并处理该情况,即将新的feed节点元素放在文件中的位置。

答案 1 :(得分:0)

XMLDocument类提供了从文档中选择节点的方法。

使用此选项可选择包含条件的外部节点

public XmlNode SelectSingleNode(
    string xpath,
    XmlNamespaceManager nsmgr
)

然后使用包含您从Yahoo返回的属性的xpath语句再次使用它。如果不存在任何节点,则只需使用

将节点添加到条件集合中
public virtual XmlNode CreateNode(
    string nodeTypeString,
    string name,
    string namespaceURI
)