0

属性の値を取得する子ノードの on マッチングをループするために使用している XML ファイルがあります。これらの値を * 文字または ? いくつかの正規表現スタイルのような文字..誰かがこれを行う方法を教えてもらえますか.したがって、リクエストがg.portal.comのように来る場合、それは2番目のノードと一致する必要があります.私は.net 2.0を使用しています.

以下は私のXMLファイルです

<Test>
   <Test Text="portal.com" Sample="1" />
   <Test Text="*.portal.com" Sample="201309" />
   <Test Text="portal-0?.com" Sample="201309" />       
</Test>



XmlDocument xDoc = new XmlDocument();
  xDoc.Load(PathToXMLFile);
 foreach (XmlNode node in xDoc.DocumentElement.ChildNodes)
                         {

                             if (node.Attributes["Sample"].InnerText == value)
                             {

                             }

                         }
4

2 に答える 2

1

必要なことは、まず各Text属性を有効なRegexパターンに変換してから、それを使用して入力に一致させることです。このようなもの:

string input = "g.portal.com";
XmlNode foundNode = null;
foreach (XmlNode node in xDoc.DocumentElement.ChildNodes)
{
    string value = node.Attributes["Text"].Value;
    string pattern = Regex.Escape(value)
        .Replace(@"\*", ".*")
        .Replace(@"\?", ".");
    if (Regex.IsMatch(input, "^" + pattern + "$"))
    {
        foundNode = node;
        break;  //remove if you want to continue searching
    }
}

上記のコードを実行するとfoundNode、xml ファイルの 2 番目のノードが含まれているはずです。

于 2013-11-05T08:35:00.707 に答える
0

パターンを設定する XML ファイルがありますね。これらのパターンをRegexes にフィードし、それらを介して多数のリクエストをストリーミングする必要があります。私はそれを正しく理解しましたか?

XML ファイルが変更されないと仮定すると、それに応じて処理する必要があるだけRegexです。たとえば、次のよう*.portal.comに変換されます

new Regex("\\w+\\.portal\\.com");

ドットをエスケープし、セマンティクスがパターンに正しく一致すると推測した場合は、と*に置き換えるだけです。\\w+?\\w

http://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspxで正しい置換を検索します。

于 2013-11-05T07:52:18.847 に答える