我有一个结构如下的XML文件: 我读过的所有示例都显示了插入节点,但没有如下所述。
<asset>
<vehicle inUse="true">
<type>sedan</type>
<model>735i</model>
<make>BMW</make>
<year>2017</year>
</vehicle>
<vehicle inUse="true">
<type>sedan</type>
<model>735i</model>
<make>BMW</make>
<year>2016</year>
</vehicle>
</asset>
我想进行批量编辑,并在具有最高年份值的现有车辆节点之后插入一个新的车辆节点。所以在2017年之后
例如,上面的代码将最终如下所示:
<asset>
<vehicle inUse="true">
<type>sedan</type>
<model>735i</model>
<make>BMW</make>
<year>2017</year>
</vehicle>
<!-- new node here-->
<vehicle inUse="true">
<type>sedan</type>
<model>735i</model>
<make>BMW</make>
<year>2010</year>
</vehicle>
<vehicle inUse="true">
<type>sedan</type>
<model>735i</model>
<make>BMW</make>
<year>2016</year>
</vehicle>
</asset>
答案 0 :(得分:1)
您可以将xml转换为xmlString,并且应该搜索最高年份值在哪里,并获取其索引
XElement root = XElement.Parse(xmlString);
var vehicles= root.Descendants("vehicle").ToArray();
var elementBeforeInsert = vehicles[index+1];
elementBeforeInsert.AddBeforeSelf(new XElement("vehicle")); // insert your vehicle here
答案 1 :(得分:0)
var xml = XElement.Load("test.xml");
var maxYear = xml.Elements().Max(e => (int)e.Element("year"));
var newestVehicle = xml.Elements().First(e => (int)e.Element("year") == maxYear);
newestVehicle.AddAfterSelf(new XElement("vehicle"));
此代码效率不高,因为它在xml上进行了两次传递。
如果连接MoreLinq库,代码将变得更加简单:
var xml = XElement.Load("test.xml");
var newestVehicle = xml.Elements().MaxBy(e => (int)e.Element("year")).First();
newestVehicle.AddAfterSelf(new XElement("vehicle"));