XML:使用C#在元素中搜索特定文本

本文关键字:搜索 文本 元素 使用 XML | 更新日期: 2023-09-27 18:27:06

我正在尝试从不同的网站获取PDF链接列表。首先,我使用Web客户端类来下载页面源代码。然后,我使用sgmlReader将HTML转换为XML。因此,对于一个特定的网站,我会得到一个看起来像这样的标签:

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

我需要抓取所有包含".pdf"的链接。显然,并不是所有网站都是一样的,所以仅仅搜索<p>标签是不够动态的。我宁愿不用linq,但如果必须的话我会的。提前谢谢。

XML:使用C#在元素中搜索特定文本

Linq让这一切变得简单。。。

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

走开!(注意:这是从内存中完成的,所以你可能需要在一定程度上修复它)

对于没有href(锚点)的<a/>标签,这将失败,但您可以肯定地修复它。。。

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