C# 在C中循环遍历XML文件时执行正则表达式样式比较#

C# 在C中循环遍历XML文件时执行正则表达式样式比较#,c#,xml,regex,C#,Xml,Regex,我有一个XML文件,我正在使用它循环通过一个子节点的匹配来获取属性的值?类似于正则表达式样式的字符。有人能告诉我怎么做吗。因此,如果请求来自g.portal.com,它应该与第二个节点匹配。我使用的是.net 2.0 下面是我的XML文件 <Test> <Test Text="portal.com" Sample="1" /> <Test Text="*.portal.com" Sample="201309" /> <Test Text

我有一个XML文件,我正在使用它循环通过一个子节点的匹配来获取属性的值?类似于正则表达式样式的字符。有人能告诉我怎么做吗。因此,如果请求来自g.portal.com,它应该与第二个节点匹配。我使用的是.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)
                             {

                             }

                         }

XmlDocument xDoc=新的XmlDocument();
加载(路径文件);
foreach(xDoc.DocumentElement.ChildNodes中的XmlNode节点)
{
if(node.Attributes[“Sample”].InnerText==值)
{
}
}

所以您有一个设置模式的XML文件,对吗?您需要将这些模式输入到
Regex
es中,然后通过它们传输大量请求。我说的对吗

假设XML文件没有更改,则只需要将其处理为符合
Regex
es的格式。例如,
*.portal.com
将转换为

new Regex("\\w+\\.portal\\.com");
如果我猜对了您匹配模式的语义,您只需避开这些点,将
*
替换为
\\w+
并将
替换为
\\w


中查找正确的替换项,您需要做的是首先将每个
文本
属性转换为有效的
正则表达式
模式,然后使用它匹配您的输入。大概是这样的:

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文件中的第二个节点。

为什么不改用handy LINQ to xml?由于理论上的原因,正则表达式和XML不能很好地结合在一起。我必须使用.NET2.0,所以我想让它保持基本。