解析此字符串的最简单方法是什么?我只想从中获取两个值。我需要在QueryParameter Parameter = \之后获取值,然后从\“$ MPElement [Name ='
之后获取值我做过的任何帮助都尝试了下面的代码
string myString = listQueryParameter[0]._parameter.ToString();
string text= myString.Split(new [] {"QueryParameter Parameter="}, StringSplitOptions.None)[1];
但它仍然给了我一切的价值,谢谢。
<QueryParameter Parameter=\"TypeProjectionId\" Value=\"$MPElement[Name='System.WorkItem.Incident.View.ProjectionType']$\" xmlns=\"clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework\" />"
答案 0 :(得分:3)
您的输入看起来像XML,但不是真正有效的XML。
我的建议是调查这些内容的来源,并修复源代码以便生成正确的XML。我的猜测是,实际上你已经拥有了有效的XML,但是你查看了VS调试器中的字符串,并添加了反斜杠,然后假设它们是字符串的一部分。如果是这种情况,那么请放心,他们不是。
作为参考,有效的XML可能如下所示:
<QueryParameter Parameter="TypeProjectionId" Value="$MPElement[Name='System.WorkItem.Incident.View.ProjectionType']$" xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" />
换句话说,它与你的相同,但没有反斜杠。
现在我们可以使用XElement.Parse
将其转换为已解析的值:
var xml = XElement.Parse(myString);
如果您将无效的 XML提供给此,则会抛出。
现在我们要查看两个属性Parameter
和Value
的值:
var parameter = xml.Attribute("Parameter").Value;
var value = xml.Attribute("Value").Value;
此时,value
包含字符串$MPElement[Name='System.WorkItem.Incident.View.ProjectionType']$
。你说你想要Name=
之后的部分,所以让我们使用正则表达式:
var match = Regex.Match(value, @"\bName='([^']*?)'");
if (!match.Success)
throw new Exception("The Value attribute is not in a recognized format.");
var innerValue = match.Groups[1].Value;