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>
试试这个,它可能会对你有所帮助:
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
//....
}
}
}