我有一个基本上是XML节点的字符串,我需要提取属性的值.我试图使用以下C#代码来完成此任务:
string line = "<log description="Reset Controls - MFB - SkipSegment = True" start="09/13/2011 10:29:58" end="09/13/2011 10:29:58" timeMS="0" serviceCalls="0">"
string pattern = "\"[\\w ]*\"";
Regex r = new Regex(pattern);
foreach (Match m in Regex.Matches(line, pattern))
{
MessageBox.Show(m.Value.Substring(1, m.Value.Length - 2));
}
Run Code Online (Sandbox Code Playgroud)
问题是,这只是返回字符串中的最后一次出现(上例中的"0"),当每个字符串包含5次出现时.如何使用C#获取每次事件?
不要尝试使用正则表达式解析XML.请改用XML API.尝试将"足够的XML解析器"整合到一起是一个非常糟糕的主意 - 你最终会得到令人难以置信的脆弱代码.
现在你的行实际上并不是一个有效的XML元素 - 但是如果你添加</log>它就会是.
XElement element = XElement.Parse(line + "</log>");
foreach (XAttribute attribute in element.Attributes())
{
Console.WriteLine("{0} = {1}", attribute.Name, attribute.Value);
}
Run Code Online (Sandbox Code Playgroud)
这有点 hacky,但它比尝试自己伪造XML解析更好.