我正在从网站中提取 XML 站点地图来解析它。
最简单的方法是将其反序列化为对象。
我在示例代码的最后一行抛出错误“XML 文档中的错误”。有谁知道为什么。错误消息中没有更多详细信息。
到目前为止我的代码:
[Serializable, XmlRoot("urlset")]
public class Urlset
{
public B5_Url[] urls;
}
[XmlType("url")]
public class B5_Url
{
[XmlElement("loc")]
public string loc;
[XmlElement("lastmod")]
public string lastmod;
[XmlElement("changefreq")]
public string changefreq;
}
class Program
{
static void Main(string[] args)
{
string url = "http://www.myurl.de/sitemap.xml";
XmlSerializer ser = new XmlSerializer(typeof(Urlset));
WebClient client = new WebClient();
string data = Encoding.Default.GetString(client.DownloadData(url));
Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(data));
Urlset reply = (Urlset)ser.Deserialize(stream);
}
}
这是 XML:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://www.myurl.de/</loc>
<lastmod>2012-06-25T17:10:30+00:00</lastmod>
<changefreq>always</changefreq>
</url>
</urlset>
感谢您的帮助:)
最佳答案
你应该按照@vitalygolub 的建议去做。此外,由于在根元素中设置了命名空间,您仍然会收到错误消息。要修复它:
[XmlRoot("urlset", Namespace="http://www.sitemaps.org/schemas/sitemap/0.9")]
public class Urlset
{
[XmlElement("url")]
public B5_Url[] urlset;
}
public class B5_Url
{
[XmlElement("loc")]
public string loc;
[XmlElement("lastmod")]
public string lastmod;
[XmlElement("changefreq")]
public string changefreq;
}
我测试了这段代码,它适用于您的输入。
关于c# - 使用 C# 从 URL 反序列化 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013021/