0

我有一个 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)
                             {

                             }

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

于 2013-11-05T08:35:00.707 回答
0

所以你有一个设置模式的 XML 文件,对吧?您需要将这些模式输入到Regexes 中,然后通过它们流式传输许多请求。我说对了吗?

假设xml文件没有变化,只需要根据Regexes处理即可。例如*.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 回答