C# 在C中循环遍历XML文件时执行正则表达式样式比较#
我有一个XML文件,我正在使用它循环通过一个子节点的匹配来获取属性的值?类似于正则表达式样式的字符。有人能告诉我怎么做吗。因此,如果请求来自g.portal.com,它应该与第二个节点匹配。我使用的是.net 2.0 下面是我的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
<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,所以我想让它保持基本。