c# - 使用 C# 从 URL 反序列化 XML

标签 c# xml deserialization

我正在从网站中提取 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/

相关文章:

Django Rest 框架 : how to make field required/read-only only for update actions such as PUT and PATCH?

c# - 反序列化 JSON - 如何忽略根元素?

c# - C# .NET 中的表单

c# - 如何在 C# 中编写线性同余生成器 (LCG)?或者有什么众所周知的实现吗?

xml - 如何使用 Visual Studio 2005 根据架构验证 XML 文件

android - 解析本地 xml 文件并在 web View 中显示解析的数据

c# - 加参数后的SQL语句

c# - 在 Cosmos DB 中存储具有动态属性的对象

xml - 为什么 'null-namespace' 对于定义为 'have' 的 xml 元素是架构中的命名空间?

java - 有没有办法知道反序列化后发送了哪种类型的java对象?