0

该文件是

<?xml version="1.0" encoding="UTF-8"?>

<opml version="1.0">
    <head>
        <title>subscriptions</title>
    </head>
    <body>

        <outline text="Tech" title="Tech">
            <outline type="rss" text="The Verge" title="The Verge" xmlUrl="http://www.theverge.com/rss/full.xml" htmlUrl="https://www.theverge.com/"/>
        </outline>

    </body>
</opml>

并通过使用代码从读取的内容中提取属性

public List<FeedsMainMenuItem> Import(string uri)
{
    XDocument doc = XDocument.Parse(uri);
    //XDocument doc = XDocument.Load(uri);
    List<FeedsMainMenuItem> t = doc
                           .Descendants("outline")
                           .Elements("outline")
                           .Select(o => new FeedsMainMenuItem
                           {
                               FeedUrl = o.Attribute("xmlUrl").Value,
                               Title = o.Attribute("title").Value,
                               SiteUrl = o.Attribute("htmlUrl")?.Value,
                               Favicon = "https://www.google.com/s2/favicons?domain_url=" + o.Attribute("htmlUrl")?.Value

                           })
                           .ToList();
    return t;
}

但无法读取“htmlUrl”属性值

SiteUrl = o.Attribute("htmlUrl")?.Value

那么,为什么连价值都在那里,解决方案是什么

编辑:FeedsMainMenuItem 类

公共类 FeedsMainMenuItem {

[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string FeedUrl { get; set; }
public string Title { get; set; }
public string Favicon { get; set; }
public string SiteUrl { get; set; }
public DateTime LastUpdated { get; set; }

[Ignore]
public Type ViewModelToLoad
{
    get { return JsonConvert.DeserializeObject<Type>(ViewModelToLoadString) ?? typeof(RssFeedViewModel); }
    set { ViewModelToLoadString = JsonConvert.SerializeObject(value); }
}

public string ViewModelToLoadString { get; set; }

//public Type ViewModelToLoad { get; set; } = typeof(RssFeedViewModel);

[OneToMany]
public List<RssSchemaExtended> FeedsItems { get; set; }

}

4

1 回答 1

0

如果FeedsMainMenuItem您生成如下

// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class outline
{

    private outlineOutline outline1Field;

    private string textField;

    private string titleField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("outline")]
    public outlineOutline outline1
    {
        get
        {
            return this.outline1Field;
        }
        set
        {
            this.outline1Field = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string text
    {
        get
        {
            return this.textField;
        }
        set
        {
            this.textField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string title
    {
        get
        {
            return this.titleField;
        }
        set
        {
            this.titleField = value;
        }
    }
}

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class outlineOutline
{

    private string typeField;

    private string textField;

    private string titleField;

    private string xmlUrlField;

    private string htmlUrlField;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string type
    {
        get
        {
            return this.typeField;
        }
        set
        {
            this.typeField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string text
    {
        get
        {
            return this.textField;
        }
        set
        {
            this.textField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Title
    {
        get
        {
            return this.titleField;
        }
        set
        {
            this.titleField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string FeedUrl
    {
        get
        {
            return this.xmlUrlField;
        }
        set
        {
            this.xmlUrlField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string SiteUrl
    {
        get
        {
            return this.htmlUrlField;
        }
        set
        {
            this.htmlUrlField = value;
        }
    }
}

我已经用这段代码测试过

 public static void Import(string uri)
        {
           XDocument doc = XDocument.Load(uri);
            List <outlineOutline> t = doc
                                   .Descendants("outline")
                                   .Elements("outline")
                                   .Select(o => new outlineOutline
                                   {
                                       FeedUrl = o.Attribute("xmlUrl").Value,
                                       Title = o.Attribute("title").Value,
                                       SiteUrl = o.Attribute("htmlUrl")?.Value,

                                   })
                                   .ToList();

            Console.WriteLine("FeedUrl" + t[0].SiteUrl);
        }

如果您需要任何帮助,请告诉我。

于 2020-05-17T14:09:14.893 回答