继我之前发布的帖子之后,我正在按照我的要求取得进展,但对RegEx表达式的工作原理不太了解,我被卡住了!
这一行:
FilesM = Regex.Matches(StrFile, "<link.*?href=""(.*?)"".*? />")
从我的页面的HTML中提取所有<link..
元素以编译合并的style
文件。
但是,我需要排除任何media="print"
个链接。
我也在尝试组合JS脚本
FilesM1 = Regex.Matches(StrFile, "<script.*?src=""(.*?)"".*?></script>")
是这样,但在这种情况下,我想要排除任何未在本地托管的脚本。我想通过排除href
以“http”
那么如何从匹配集合中排除这两个案例呢?
答案 0 :(得分:1)
我知道这不是你想要的,但是,如果你感兴趣,这里有一个例子,说明如何找到你关心使用XPath的元素:
Dim doc As New XmlDocument()
doc.LoadXml(html)
Dim linkNodes As XmlNodeList = doc.SelectNodes("descendant-or-self::link[(@href) and (not(@media) or (@media != 'print'))]")
Dim scriptNodes As XmlNodeList = doc.SelectNodes("descendant-or-self::script[(@src) and (not(starts-with(@src,'http')))]")
XmlDocument.SelectNodes
方法返回与给定XPath匹配的所有元素。
在XPath字符串中,descendant-or-self::
表示您希望它从当前位置(根)向下搜索所有后代以查找以下元素名称。如果省略了它,它只会在当前(根)级别查找匹配的元素。
[]
条款提供了条件。因此,例如,link[@media != 'print']
将匹配没有等于“print”的媒体属性的所有链接元素。 @符号指定属性名称。
在条件中单独列出属性名称意味着您正在检查该属性是否存在。例如,link[@href]
匹配所有具有href
属性的链接元素。