如何使用XElement C#Console获取机箱URL

时间:2017-07-14 10:36:37

标签: c# xpath xelement

我使用C#Console从多个来源读取了多个Feed,我有这个代码,我可以从源代码加载XML:

XmlDocument doc = new XmlDocument();
doc.Load(sourceURLX);
XElement xdoc = XElement.Load(sourceURLX);

如何获取附件网址并显示为变量?

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题(我在这里做了一个很大的假设) - 你想从根(或'封闭')标签中选择一个名为'url'的属性?

您可以在此处使用XPath查询。请考虑以下XML:

<?xml version="1.0" encoding="utf-8"?>
<root url='google.com'>
    <inner />
</root>

您可以使用以下代码检索“google.com”:

String query = "/root[1]/@url";
XmlDocument doc = new XmlDocument();
doc.Load(sourceURLX);
String value = doc.SelectSingleNode(query).InnerText;

有关XPath语法的更多信息,请参见here

修改:正如您在评论中所述,您正在使用以下XML:

<item>
    <description>
    </description>
    <enclosure url="blablabla.com/img.jpg" />
</item>

因此,您可以使用以下XPath查询检索网址:

/item[1]/enclosure[1]/@url

答案 1 :(得分:0)

使用下面的xml

<?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0">
        <channel>
            <title>title</title>
            <link>https://www.link.com</link>
            <description>description</description>
            <item>
                <title>RSS</title>
                <link>https://www.link.com/xml/xml_rss.asp</link>
                <description>description</description>
                <enclosure url="https://www.link.com/media/test.wmv"
                           length="10000" 
                           type="video/wmv"/>
           </item>
       </channel>
    </rss>

通过阅读属性

,您将获得url
var document = XDocument.Load(sourceURLX);
var url = document.Root
                  .Element("channel")
                  .Element("item")
                  .Element("enclosure")
                  .Attribute("url")
                  .Value;

获取多个网址

var urls = document.Descendants("item")
                   .Select(item => item.Element("enclosure").Attribute("url").Value)
                   .ToList();

使用foreach循环

foreach (var item in document.Descendants("item"))
{
    var title = item.Element("title").Value;
    var link = item.Element("link").Value;
    var description = item.Element("description").Value;
    var url = item.Element("enclosure").Attribute("url").Value;
    // save values to database
}