XElemenet AddAfterSelf 没有添加到最后一个节点
XElemenet AddAfterSelf not adding to last node
创建 XML 的代码:
public static string TagInvoice()
{
string InvoiceAll = "";
foreach (var item in QueryDb.ListaPostavkRacuna)
{
XElement Invoice = new XElement("Invoice",
new XElement("Identification",
new XElement("Structure", item.Structure),
new XElement("NrStructure", item.NrStructure)),
new XElement("ItemsDesc",
new XElement("DESC",
new XElement("DESC1","some_value"),
new XElement("DESC2", "ordinary"))));
for (int i = 1; i <= (int)Math.Ceiling(item.item_desc.Length / 35d); i++)
{
int Max = 35,
Min = 35 * i - Max;
if (item.item_desc.Length >= (Min + Max))
{
Min = Max * i - Max;
}
else
{
Max = item.item_desc.Length - (i - 1) * 35;
Min = (i - 1) * 35;
}
XElement TempItemDesc = new XElement("ItemsDesc",
new XElement("Code", item.code_art),
new XElement("DESC",
new XElement("DESC1", item.item_desc.Substring(Min, Max))));
Invoice.Element("ItemsDesc").AddAfterSelf(TempItemDesc);
}
InvoiceAll = InvoiceAll.ToString() + Invoice.ToString();
}
return InvoiceAll;
}
如果您仔细观察,您会发现我正在将大字符串分成最大为 35 length
的小字符串。
然后将那些较小的 字符串 合并到 TempItemDesc 并添加到 XElement Invoice.
问题出在那些 添加的 元素的顺序上。看起来 AddAfterSelf 方法只考虑了
首先(原始)<ItemsDesc> 所以我的节点添加顺序不正确(见下文):
示例:
String = "A B C D"
节点应添加如下:
"A"
"B"
"C"
"D"
已添加:
"D"
"C"
"B"
"A"
这是预期的行为吗,我怎样才能以正确的顺序将我的节点添加到列表中?
如 MSDN 中所述,
AddAfterSelf, adds the specified content immediately after current node.
您正在第一个节点之后添加节点。
试试这个代码:
Invoice.Element("ItemsDesc").Last().AddAfterSelf(TempItemDesc);
相关link:XNode.AddAfterSelf Method
创建 XML 的代码:
public static string TagInvoice()
{
string InvoiceAll = "";
foreach (var item in QueryDb.ListaPostavkRacuna)
{
XElement Invoice = new XElement("Invoice",
new XElement("Identification",
new XElement("Structure", item.Structure),
new XElement("NrStructure", item.NrStructure)),
new XElement("ItemsDesc",
new XElement("DESC",
new XElement("DESC1","some_value"),
new XElement("DESC2", "ordinary"))));
for (int i = 1; i <= (int)Math.Ceiling(item.item_desc.Length / 35d); i++)
{
int Max = 35,
Min = 35 * i - Max;
if (item.item_desc.Length >= (Min + Max))
{
Min = Max * i - Max;
}
else
{
Max = item.item_desc.Length - (i - 1) * 35;
Min = (i - 1) * 35;
}
XElement TempItemDesc = new XElement("ItemsDesc",
new XElement("Code", item.code_art),
new XElement("DESC",
new XElement("DESC1", item.item_desc.Substring(Min, Max))));
Invoice.Element("ItemsDesc").AddAfterSelf(TempItemDesc);
}
InvoiceAll = InvoiceAll.ToString() + Invoice.ToString();
}
return InvoiceAll;
}
如果您仔细观察,您会发现我正在将大字符串分成最大为 35 length
的小字符串。
然后将那些较小的 字符串 合并到 TempItemDesc 并添加到 XElement Invoice.
问题出在那些 添加的 元素的顺序上。看起来 AddAfterSelf 方法只考虑了 首先(原始)<ItemsDesc> 所以我的节点添加顺序不正确(见下文):
示例:
String = "A B C D"
节点应添加如下:
"A"
"B"
"C"
"D"
已添加:
"D"
"C"
"B"
"A"
这是预期的行为吗,我怎样才能以正确的顺序将我的节点添加到列表中?
如 MSDN 中所述,
AddAfterSelf, adds the specified content immediately after current node.
您正在第一个节点之后添加节点。 试试这个代码:
Invoice.Element("ItemsDesc").Last().AddAfterSelf(TempItemDesc);
相关link:XNode.AddAfterSelf Method