我有以下XML:
<?xml version="1.0"?>
<Script>
<object Id="ID1">
<Expression>EXPR1</Expression>
<Result>value="0" action="sleep"</Result>
<Result>value="1" action="wakeup"</Result>
<Result>value="2" action="shutdown"</Result>
<Result>value="3" action="startup"</Result>
</object>
<object Id="ID2">
<Expression>EXPR2</Expression>
<Result>value="10" action="sleep"</Result>
<Result>value="11" action="wakeup"</Result>
<Result>value="12" action="shutdown"</Result>
<Result>value="13" action="startup"</Result>
</object>
</Script>
我正在尝试将数据抓取到这样一个类:
public class Script
{
public string Id { get; set; }
public string Expression { get; set; }
public List<ScriptItem> Results { get; set; }
}
public class ScriptItem
{
public string Value { get; set; }
public string Action { get; set }
}
但我真的很困惑和混乱。
这是一个尝试的例子:
var list = from item in xmlDoc.Descendants("object")
let id = item.Elements("Id")
let expression = item.Elements("Expression")
let resultlist = item.Elements("Result")
where id != null
select new Script
{
ObjectId = id.ToString(),
Expression = expression.ToString(),
Results = result.ToList()
};
我不是Linq和lambda的专家,所以感谢任何帮助。
答案 0 :(得分:1)
我可能会做几次查询。
var objects = xmlDoc.Descendants("object");
var items =
objects
.Select(item =>
new Script
{
Id = item.Attribute("Id").Value,
Expression = item.Descendant("Expression").Content.Value,
Results =
item
.Elements("Result")
.Select(result =>
new ScriptItem
{
Value = result.Attribute("Value").Value,
Action = result.Attribute("Action").Value
}
)
.ToList()
}
);
类似的东西......假设你认为结果是属性。
答案 1 :(得分:0)
最终的XML代码:
<?xml version="1.0"?>
<Script>
<Object>
<Id>ID1</Id>
<Expression>EXPR1</Expression>
<Result>
<Value>0</Value>
<Action>sleep</Action>
</Result>
<Result>
<Value>1</Value>
<Action>wakeup</Action>
</Result>
<Result>
<Value>2</Value>
<Action>shutdown</Action>
</Result>
<Result>
<Value>3</Value>
<Action>startup</Action>
</Result>
</Object>
</AnimationScript>
然后是代码:
var objectList = xmlDoc.Descendants("Object")
.Select(item => item);
foreach (var item in objectList)
{
string id = item.Element("Id").Value;
string expression = item.Element("Expression").Value;
var results = item.Descendants("Result").Select(result => result);
foreach (var result in results)
{
string value = result.Element("Value").Value;
string action = result.Element("Action").Value;
}
}
只需要将itens添加到确定的类而不是公共变量,但是测试和搜索确定。
非常'一步一步'的方式,这样我几年后就能记住这个代码。
感谢您的帮助。