XML:使用C搜索元素以查找特定文本#

问题描述:

我试图从不同网站获取PDF链接的列表。首先,我使用Web客户端类来下载页面源代码。然后我使用sgmlReader将HTML转换为XML。所以对于一个特定的网站,我会得到一个如下所示的标签:XML:使用C搜索元素以查找特定文本#

<p><a href="pub/1985_to_1997_Board_Action_Summary.pdf">1985 to 1997 Board Action Summary</a></p> 

我需要抓取所有包含“.pdf”的链接。很显然,并非所有网站的布局都是相同的,所以只需要搜索<p>标签,就不会变得足够动态。我宁可不使用linq,但如果必须的话,我会。提前致谢。

LINQ使这容易...

var hrefs = doc.Root.Descendants("a") 
    .Where(a => a.Attrib("href").Value.ToUpper().EndsWith(".PDF")) 
    .Select(a => a.Attrib("href")); 

远离你去! (注:这样做从内存,所以你可能在一定程度上解决这个问题)

这将打破为<a/>标签没有一个href(锚),但你可以解决这个问题肯定......

+0

XMLDocument类没有“根”方法。我需要使用不同的课程吗? – broke 2012-03-08 16:51:27

+0

是的,我指的是XDocument。如果我没有记错的话,你可以从XmlDocument实例创建一个XDocument。 – 2012-03-08 17:00:50

+0

如果“a”恰好是小写字母,这很好。如果它的资本是“A”,它就会中断。 – broke 2012-03-08 17:35:45

我想你有2个选择。如果您只需要链接,则可以使用正则表达式查找以.pdf结尾的字符串的匹配项。如果您需要操作XML结构或从XML中获取其他值,最好使用XmlDocument并使用XPath查询来查找与其中的pdf文件链接的节点。使用LINQ to XML只需减少需要编写的代码行数。