1

Wordpressで生成されたページには、次のメタタグがあります。

<meta name="generator" content="WordPress 3.4.2" />

「3.4.2」(上記の例)を簡単に抽出する方法を探しています

XmlDocumentまたは正規表現を使用する方が速いでしょうか?

JSoupを見つけましたが、それは私がやろうとしていることにはやり過ぎです。

編集

明確にするために-私は外部ライブラリを含めたくありません。
また、これはクラスライブラリで実行されているため、PowerShellを使用することもできません。

4

4 に答える 4

3

ペアのタグなどを一致させようとしているわけではないので、正規表現で十分です。ただ検索するcontent="WordPress (\d\.\d\.\d)か、類似しています。meta(本当に一貫している場合は、タグ全体を検索できます。)

HTMLページをXmlDocumentとして解析しようとすると、うまくいかない場合があります。すべての有効な(またはブラウザでサポートされている)HTMLが有効なXMLであるとは限りません。

于 2012-10-19T23:44:08.797 に答える
1

HTMLAgilityPackを使用してHTMLを解析します

ここに画像の説明を入力してください

編集(コピーするコード)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;

namespace HTMLAgilityExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string contentValue;

            HtmlDocument document = new HtmlDocument();
            document.Load("C:/test.html");
            foreach(HtmlNode link in document.DocumentNode.SelectNodes("//meta[@content]"))
            {
                HtmlAttribute attribute = link.Attributes["content"];
                if(attribute.Value.Contains("WordPress"))
                {
                    contentValue = attribute.Value.Replace("WordPress", "").Trim();
                }
            }
        }
    }
}
于 2012-10-20T00:51:54.653 に答える
1

とにかく属性値からバージョンを解析する必要があり、このタスク以外の広範なHTML解析を行う必要がないように思われるため、正規表現をお勧めします。

これはあなたにスタートを与えるはずです。式は少し簡略化できます。属性値がメタタグ内にあることを指定する必要がない場合もあります。または、少し締めることもできます。「content」属性を指定したほうがよいかもしれません。いずれにせよ、これは私のクイックテストで機能しました。

読みやすくするために、正規表現内に空白を残し、IgnorePatternWhitespaceオプションを含めるのが好きであることに注意してください。

var html = ""; // Populate the html string here

var options = RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace;
var regx = new Regex( "<meta\\s+? .*? WordPress\\s*? (?<version> [\\d\\.]+) [^\\d\\.] .*? />", options );

var match = regx.Match( html );

if ( match.Success ) {
    var version = match.Groups["version"].Value;
}
于 2012-10-20T15:55:15.807 に答える
0

PowerShellを使用できます:

PS> [xml]$xml = '<meta name="generator" content="WordPress 3.4.2" />'
PS> ($xml.meta.content) -match "[\d\.]+"
True
PS> $matches[0]
3.4.2
于 2012-10-19T23:59:07.137 に答える