18

我正在编写一个简短的 C# 来解析给定的 XML 文件。但是其中 1 个标记值可以更改,但始终在 where 子句中包含单词“Fast Start up”(不考虑大小写和空格,但顺序必须相同)。我不确定如何在 C# 中的类似 sql 语句中执行此操作。

var selected = from cli in doc.Descendants(xmlns+ "Result")
     where cli.Element(xmlns + "ResultsLocation").Value == "Assessments-Fast-Startup"
                       select cli;
4

2 回答 2

20

假设您正在寻找确切的字符串 - 您可以只使用 aString.Contains吗?

var selected = from cli in doc.Descendants(xmlns+ "Result")
     where cli.Element(xmlns + "ResultsLocation").Value.Contains("Assessments-Fast-Startup")
     select cli;

否则,类似:

var rx = new Regex("fast(.*?)startup", RegexOptions.IgnoreCase);

var selected = from cli in doc.Descendants(xmlns+ "Result")
    where rx.IsMatch(cli.Element(xmlns + "ResultsLocation").Value)
    select cli;
于 2013-06-04T16:33:46.927 回答
2

一个正则表达式fast[- ]?start[- ]?up应该工作

可选的破折号空格可以分隔单词部分

...
where Regex.IsMatch(
    cli.Element(xmlns + "ResultsLocation").Value, 
    "fast[- ]?start[- ]?up", 
    RegexOptions.IgnoreCase
)
select cli

如果您发现需要调整正则表达式,请尝试像http://regexpal.com/这样的正则表达式测试器

正如@DaveBish 所提到的,您可以使用.Contains(...)测试而不是正则表达式甚至.ToLower().Contains(...)链接(您可能还需要null检查)

于 2013-06-04T16:37:04.860 回答