Я пытаюсь переупорядочить xmlnodes, сравнивая их со строками с данными.Ниже приведен мой код и пример.
<OrderDetails>
<StockLine>
<StockCode>StockCode1</StockCode>
<StockDescription>Description1</StockDescription>
</StockLine>
<StockLine>
<StockCode>StockCode2</StockCode>
<StockDescription>Description2</StockDescription>
</StockLine>
<CommentLine>
<Comment>Comment1</Comment>
</CommentLine>
<CommentLine>
<Comment>Comment2</Comment>
</CommentLine>
</OrderDetails>
Я запрашиваю это для моей таблицы данных, чтобы переместить узел комментария вверх / вниз.Если столбец таблицы данных «comment» имеет какое-либо значение, добавьте узел комментария под соответствующим узлом stockline.Если столбец таблицы данных «comment» не имеет значения, добавьте следующий узел stockline.
XDocument xmldoc = XDocument.Parse(myxml);
var stkline = from node in xmldoc.Descendants("StockLine")
select node.DescendantNodes().ToList();
var cmntline = from node in xmldoc.Descendants("CommentLine")
select node.DescendantNodes().ToList();
for (int i = 0; i < DatatTable.Rows.Count; i++)
{
string dtstcode = DatatTable.Rows[i]["StockCode"].ToString();
string dtstkdes = DatatTable.Rows[i]["Description"].ToString();
string dtcmnt = DatatTable.Rows[i]["Comment"].ToString();
foreach (List<XNode> el in stkline)
{
XNode stckelement = el.FirstOrDefault();
XNode nextnode = stckelement.NextNode;
foreach (List<XNode> cmntnode in cmntline)
{
XNode cmnt = cmntnode.FirstOrDefault();
if (DatatTable.Rows[i]["Comment"] != null)
{
cmntnode.Remove();
nextnode.AddBeforeSelf(cmnt);
}
}
}
}
MessageBox.Show(xmldoc.ToString());
Попытка добиться этого результата после организации базы XML
<OrderDetails>
<StockLine>
<StockCode>StockCode1</StockCode>
<StockDescription>Description1</StockDescription>
</StockLine>
<CommentLine>
<Comment>Comment1</Comment>
</CommentLine>
<StockLine>
<StockCode>StockCode2</StockCode>
<StockDescription>Description2</StockDescription>
</StockLine>
<CommentLine>
<Comment>Comment2</Comment>
</CommentLine>
</OrderDetails>