使用 Linq 高效地处理 Xnode
本文关键字:处理 Xnode 高效 Linq 使用 | 更新日期: 2023-09-27 18:36:10
我有以下格式的 xml 节点。此节点必须转换为用户定义的类型,即每个节点必须转换为 MyClass 的对象
class MyClass
{
public string tag1Id {get;set;}
public int tag3Val {get;set;}
public string tag3Id {get;set;}
public int tag5Val {get;set;}
public string tag5Id {get;set;}
public DataTime tag7Val {get;set;}
}
<tag1 id="id1">
<tag2>
<tag3 id="id3">10</tag3>
<tag4>
<tag5 id="id5">20</tag5>
</tag4>
</tag2>
<tag6>
<tag7>2010-12-31</tag7>
</tag6>
</tag1>
我是 linq 的新手,可以使用 linq 完成吗?要求是不应使用xmlseralization:(是否有其他方法可以轻松处理这种情况?
不,这是不可能的。
由于业务逻辑管道,必须在某处完成转换才能从严格的节点 ID/位置转到特定属性。
可以做的是编写一个构造函数,该构造函数接收节点并相应地填充属性。然后,可以使用 Linq 枚举节点,并通过 select 创建类元素的新投影,例如:
string data = @"
<tags>
<tag id=""id1"">
<tag2>
<tag3 id=""id3"">10</tag3>
<tag4>
<tag5 id=""id5"">20</tag5>
</tag4>
</tag2>
<tag6>
<tag7>2010-12-31</tag7>
</tag6>
</tag>
</tags>
";
var xml = XDocument.Parse(data);
var classes = xml.Descendants( "tag1" )
.Select( nd => new MyClass( nd ) );