0

以前に作成した投稿に続いて、必要なことを進めていますが、RegEx 式がどのように機能するかについてよくわからないため、行き詰まっています!

この行:

FilesM = Regex.Matches(StrFile, "<link.*?href=""(.*?)"".*? />")

マイページのHTMLから抽出し、すべての<link..要素をまとめたstyleファイルをコンパイルします。

ただし、リンクを除外する必要がありmedia="print"ます。

また、JSスクリプトを組み合わせようとしています

FilesM1 = Regex.Matches(StrFile, "<script.*?src=""(.*?)"".*?></script>")

これを行いますが、この場合、ローカルでホストされていないスクリプトを除外したいと考えています。href「http」で始まるスクリプトを除外して、これを行いたいと思います

では、これら 2 つのケースを一致コレクションから除外するにはどうすればよいでしょうか?

4

1 に答える 1

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']「印刷」に等しいメディア属性を持たないすべてのリンク要素に一致します。@ 記号は属性名を指定します。

条件に属性名を単独でリストするだけで、その属性の存在を確認していることになります。たとえばlink[@href]、属性を持つすべてのリンク要素に一致しhrefます。

于 2012-06-15T13:00:10.233 に答える