2014-06-23 35 views
-1

我想从命名空间读取一个值,但它不工作。我正在使用下面的代码将后代传入列表中。XML子元素解析

 XDocument doc = XDocument.Parse(QueryParmeterString); 
     XNamespace ns = XNamespace.Get("http://Microsoft.EnterpriseManagement.Core.Criteria/"); 
     var expressions = (from ds in doc.Descendants(ns + "Expression") 
         select ds).ToList(); 


      foreach (var foo in expressions) 
        { 
         string baa = foo.Attributes["ValueExpressionLeft"].Value; 
        } 


    } 

在这一点上,我无法访问每个对象。我需要访问每个属性的值左右值。我有一个强类型的对象,可以存储这些值。

 <Expression xmlns="http://Microsoft.EnterpriseManagement.Core.Criteria/"> 
      <And> 
      <Expression> 
       <SimpleExpression> 
       <ValueExpressionLeft> 
        <Property>$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/TierQueue$</Property> 
       </ValueExpressionLeft> 
       <Operator>Equal</Operator> 
       <ValueExpressionRight> 
        <Value>$MPElement[Name="IncidentTierQueuesEnum.Tier2"]$</Value> 
       </ValueExpressionRight> 
       </SimpleExpression> 
      </Expression> 
      <Expression> 
       <SimpleExpression> 
       <ValueExpressionLeft> 
        <Property>$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/Status$</Property> 
       </ValueExpressionLeft> 
       <Operator>NotEqual</Operator> 
       <ValueExpressionRight> 
        <Value>$MPElement[Name="CoreIncident!IncidentStatusEnum.Resolved"]$</Value> 
       </ValueExpressionRight> 
       </SimpleExpression> 
      </Expression> 
      <Expression> 
       <SimpleExpression> 
       <ValueExpressionLeft> 
        <Property>$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/Status$</Property> 
       </ValueExpressionLeft> 
       <Operator>NotEqual</Operator> 
       <ValueExpressionRight> 
        <Value>$MPElement[Name="CoreIncident!IncidentStatusEnum.Closed"]$</Value> 
       </ValueExpressionRight> 
       </SimpleExpression> 
      </Expression> 
      <Expression> 
       <UnaryExpression> 
       <ValueExpression> 
        <GenericProperty Path="$Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser' SeedRole='Source']$">Id</GenericProperty> 
       </ValueExpression> 
       <Operator>IsNull</Operator> 
       </UnaryExpression> 
      </Expression> 
      </And> 
     </Expression> 
+0

你需要什么是什么呢?是得到每个表达式的左右表达式的值吗? –

+0

@Lamourou嗨,是的,我正在使用linq来获取返回该XML的主要表达式entrys。 – rogue39nin

+0

@Lamourou @Lamourou任何想法我也需要能够获得表达式类型一些如何看待他们的方式标签简单的表达和uniury表达式? – rogue39nin

回答

2

试试这个,它可以帮助你:

XDocument doc = XDocument.Parse(QueryParmeterString); 
XNamespace ns = XNamespace.Get("http://Microsoft.EnterpriseManagement.Core.Criteria/"); 
var expressions = (from ds in doc.Root.Descendants(ns + "Expression") 
          select ds).ToList(); 

     foreach (var foo in expressions) 
     { 
      XElement expressionTypeElement = foo.FirstNode as XElement; 
      if (expressionTypeElement != null) 
      { 
       if (expressionTypeElement.Name.LocalName == "SimpleExpression") 
       { 
        XElement valueExpressionLeft = expressionTypeElement.Element(ns +"ValueExpressionLeft"); 
        XElement valueExpressionRight = expressionTypeElement.Element(ns +"ValueExpressionRight"); 
        string operator = expressionTypeElement.Element(ns + "Operator").Value; 
        // do your job here 
        //.... 
       } 
       else if (expressionTypeElement.Name.LocalName == "UnaryExpression") 
       { 
        XElement valueExpression = expressionTypeElement.Element(ns +"ValueExpression"); 
        // do your job here 
        //.... 
       } 
      } 
     } 
+1

完美工作布里尔现在只需要解析翻转元素哈哈和xml是更容易 – rogue39nin

+0

完美,通过解析元素和XML享受您的时间。 –

+0

任何想法我将如何解析这条线budy – rogue39nin