【发布时间】:2018-03-06 22:09:54
【问题描述】:
我有一个重复OrderIds 的表,但在行中也有详细信息。我正在使用 StringBuilder 创建 XML。
如何使用for-each 循环构建XML 字符串。我不想重复标题信息,只循环详细了解那个独特的OrderId 有多少行。
表格中的示例数据
OrderId - CustomerId - ItemId - Price
123 JONES 838483 3.99
123 JONES 859300 4.99
874 ROCKY 838483 1.99
874 ROCKY 838543 2.99
期望的输出:
foreach (var o in sdr)
应用于以下 XML:
<orders>
<order>
<orderid>123</orderid>
<Customerid>JONES</CustomerId>
<items>
<itemid>838483</itemid>
<price>3.99</price>
<itemid>859300</itemid>
<price>4.99</price>
</items>
</order>
<order>
<orderid>874</orderid>
<Customerid>ROCKY</CustomerId>
<items>
<itemid>838483 </itemid>
<price>1.99</price>
<itemid>838543</itemid>
<price>2.99</price>
</items>
</order>
</orders>
这是我的尝试
foreach(sdrForEach 中的 var o) {
string currentOrderId = sdrForEach.GetValue(0).ToString();
countcycle = countcycle + 1;
if (countcycle == 1)
{
string orderId = sdrForEach.GetValue(0).ToString();
string account = sdrForEach.GetValue(1).ToString();
string customerId = sdrForEach.GetValue(2).ToString();
string orderType = sdrForEach.GetValue(3).ToString();
string fullname = sdrForEach.GetValue(4).ToString();
string address1 = sdrForEach.GetValue(5).ToString();
string address2 = sdrForEach.GetValue(6).ToString();
string city = sdrForEach.GetValue(7).ToString();
string state = sdrForEach.GetValue(8).ToString();
string phone1 = sdrForEach.GetValue(23).ToString();
string phone2 = sdrForEach.GetValue(24).ToString();
string phone3 = sdrForEach.GetValue(25).ToString();
if (String.IsNullOrEmpty(phone1)) { phone1 = ""; }
if (String.IsNullOrEmpty(phone2)) { phone2 = ""; }
if (String.IsNullOrEmpty(phone3)) { phone3 = ""; }
string notes = sdrForEach.GetValue(28).ToString();
if (String.IsNullOrEmpty(notes)) { notes = ""; }
myStringXml.Append("<service_orders> ");
myStringXml.Append("<service_order> ");
myStringXml.Append("<number>" + orderId + "</number> ");
myStringXml.Append("<account>" + account +"</account>");
myStringXml.Append("<service_type>" + orderType + "</service_type>");
myStringXml.Append("<description></description>");
myStringXml.Append("<customer>");
myStringXml.Append("<customer_id>" + customerId + "</customer_id>");
myStringXml.Append("<first_name>" + fullname + "</first_name>");
myStringXml.Append("<last_name>" + fullname + "</last_name>");
myStringXml.Append("<email>" + orderType + "</email>");
myStringXml.Append("<phone1>" + phone1 + "</phone1>");
myStringXml.Append("<phone2>" + phone2 + "</phone2>");
myStringXml.Append("<phone3>" + phone3 + "</phone3>");
myStringXml.Append("<address1>" + address1 + "</address1>");
myStringXml.Append("<address2>" + address2 + "</address2>");
myStringXml.Append("<city>" + city + "</city>");
myStringXml.Append("<state>" + state + "</state>");
myStringXml.Append("<zip>" + orderType + "</zip>");
myStringXml.Append("<latitude></latitude>");
myStringXml.Append("<longitude></longitude>");
myStringXml.Append("</customer>");
myStringXml.Append("<notes count=" + Constants.dispatchObjects.DOUBLE_QUOTE + Constants.dispatchObjects.NOTECOUNT + Constants.dispatchObjects.DOUBLE_QUOTE + ">");
myStringXml.Append("<note created_at='' author=''>" + notes + "</note>");
myStringXml.Append(" </notes>");
}
string itemPrice = sdrForEach.GetValue(12).ToString();
string itemId = sdrForEach.GetValue(13).ToString();
string itemDescription = sdrForEach.GetValue(16).ToString();
string itemSequence = sdrForEach.GetValue(29).ToString();
string qty = sdrForEach.GetValue(14).ToString();
string volume = sdrForEach.GetValue(19).ToString();
string inventoryType = sdrForEach.GetValue(21).ToString();
string storeStop = sdrForEach.GetValue(17).ToString();
string setupTime = sdrForEach.GetValue(18).ToString();
if (String.IsNullOrEmpty(setupTime)){setupTime = "";}
myStringXml.Append("<items>");
myStringXml.Append("<item>");
myStringXml.Append("<sale_sequence>"+ itemSequence +"</sale_sequence>");
myStringXml.Append("<item_id>"+ itemId +"</item_id>");
myStringXml.Append("<serial_number></serial_number>");
myStringXml.Append("<description>" + itemDescription + "</description>");
myStringXml.Append("<quantity>" + qty +"</quantity>");
myStringXml.Append("<location></location>");
myStringXml.Append("<cube>" + volume +"</cube>");
myStringXml.Append("<setup_time>" + setupTime + "</setup_time>");
myStringXml.Append("<weight></weight>");
myStringXml.Append("<price>"+ itemPrice +"</price>");
myStringXml.Append("<countable>"+ inventoryType +"</countable>");
myStringXml.Append("<store_code>" + storeStop +"</store_code>");
myStringXml.Append("</item>");
myStringXml.Append("<items>");
}
myStringXml.Append("</service_order>");
myStringXml.Append("</service_orders>");
【问题讨论】:
-
这是在数据库表中吗?什么平台?
-
不要使用字符串生成器来构建 XML。
-
是的,sql 数据库。使用 sql cmd 和 con 的传统调用,尝试从 stringbuilder .net 4.0 构建 xml
-
如果您使用的是 SQL 服务器,那么最好的选择是使用
FOR XML。如果您使用的是 .Net 4.0,请使用LINQ to XML。您会在 MSDN 和 SO 上找到大量示例。 -
仅供参考,称人们为失败者并不是交朋友和获得帮助的好方法。
标签: c# xml foreach stringbuilder