XML子元素解析

本文关键字:元素 XML | 更新日期: 2023-09-27 18:10:05

我试图从名称空间读取值,但它不工作。我正在使用下面的代码,它得到后代到一个列表。

       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>

XML子元素解析

试试这个,它可能会对你有所帮助:

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
                    //....
                }
            }
        }
相关文章: