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

C# XML:使用C在元素中搜索特定文本#,c#,xml,xml-parsing,C#,Xml,Xml Parsing,我正在尝试从不同的网站获取PDF链接列表。首先,我使用Web客户端类下载页面源代码。然后,我使用将HTML转换为XML。因此,对于一个特定的站点,我将得到一个如下所示的标记: <p><a href="pub/1985_to_1997_Board_Action_Summary.pdf">1985 to 1997 Board Action Summary</a></p> 我需要抓住所有包含“.pdf”的链接。显然,并非所有网站的布局都是相同的,因

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

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


我需要抓住所有包含“.pdf”的链接。显然,并非所有网站的布局都是相同的,因此仅仅搜索
标签是不够动态的。我宁愿不使用linq,但如果必须的话,我会使用。提前谢谢

Linq让这变得很容易

var hrefs = doc.Root.Descendants("a")
    .Where(a => a.Attrib("href").Value.ToUpper().EndsWith(".PDF"))
    .Select(a => a.Attrib("href"));
走开!(注意:这是从内存中执行的,因此您可能需要对其进行一些修复)


对于没有
href
(锚定)的
标记,这将发生故障,但您肯定可以解决这一问题。

Linq使这变得很容易

var hrefs = doc.Root.Descendants("a")
    .Where(a => a.Attrib("href").Value.ToUpper().EndsWith(".PDF"))
    .Select(a => a.Attrib("href"));
走开!(注意:这是从内存中执行的,因此您可能需要对其进行一些修复)


对于没有
href
(锚定)的
标记,这将发生故障,但您肯定可以修复它…

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

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

XMLDocument类没有“root”方法。我需要使用其他类吗?是的,我指的是XDocument。如果我没记错的话,您可以从XmlDocument实例创建XDocument。如果“a”恰好是小写的,那么这个方法非常有效。如果它是大写字母“a”,则它将中断。中断,请在.Where to doc.Root.subjections(“a”)之前添加一个Union()。其余的应该可以正常工作。XMLDocument类没有“root”方法。我需要使用其他类吗?是的,我指的是XDocument。如果我没记错的话,您可以从XmlDocument实例创建XDocument。如果“a”恰好是小写的,那么这个方法非常有效。如果它是大写字母“a”,则它将中断。中断,请在.Where to doc.Root.subjections(“a”)之前添加一个Union()。其余部分应按预期工作。