解析字符串获取两个值

时间:2014-06-20 14:04:35

标签: c# .net

解析此字符串的最简单方法是什么?我只想从中获取两个值。我需要在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\" />"

1 个答案:

答案 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提供给此,则会抛出。

现在我们要查看两个属性ParameterValue的值:

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;