【发布时间】:2012-02-09 00:46:17
【问题描述】:
我正在尝试从在线购物车中获取一个包含多个订单的 XML 文件,对其进行解析并使用 C# 和 Visual Studio 2008 将每个订单的值作为其自己的文本文件(不是 XML)输出。我尝试了多种在这一点上的方法,但没有运气。我的最后一次尝试包括与 XMLNodeList 绑定的 foreach 语句,并尝试通过使用 XMLReader 将每个元素值写入字符串来为每个名为“Order”的节点执行我的翻译。 foreach 似乎不适用于当前配置。
有没有更好的方法来做到这一点,还是我需要继续使用 foreach?所有的想法都非常感谢。
class Class1
{
public static void Main()
{
StringBuilder orderid = new StringBuilder();
StringBuilder ordernumber = new StringBuilder();
StringBuilder name = new StringBuilder();
StringBuilder staddress = new StringBuilder();
StringBuilder city = new StringBuilder();
StringBuilder state = new StringBuilder();
StringBuilder zip = new StringBuilder();
StringBuilder country = new StringBuilder();
StringBuilder email = new StringBuilder();
StringBuilder partnumber = new StringBuilder();
StringBuilder quantity = new StringBuilder();
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\onlinesales\neworders.xml");
XmlNode root = doc.DocumentElement;
XmlNodeList nodeList = root.SelectNodes("Order");
foreach (XmlNode order in nodeList)
{
using (XmlReader reader = XmlReader.Create("Order"))
{
reader.ReadToFollowing("OrderNumber");
ordernumber.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("OrderGUID");
orderid.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("FirstName");
name.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("Email");
email.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("BillingAddress1");
staddress.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("BillingCity");
city.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("BillingState");
state.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("BillingZip");
zip.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("BillingCountry");
country.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("Quantity");
quantity.Append(reader.ReadElementContentAsString());
reader.ReadToFollowing("OrderedProductManufacturerPartNumber");
partnumber.Append(reader.ReadElementContentAsString());
}
using (StreamWriter fileout =
new StreamWriter("W:" + DateTime.Now.ToString("yyyyy-MM-dd_hh-mm-ss-ff") + ".txt", false, Encoding.ASCII))
{
fileout.WriteLine("ISA*00* *00* *ZZ*daisywebstore *12*5016361200 *" + DateTime.Now.ToString("yyMMdd") + "*1559*U*00400*000001649*0*P>~");
fileout.WriteLine("GS*PO*daisywebstore*5016361200*" + DateTime.Now.ToString("yyyyMMdd") + "*" + DateTime.Now.ToString("HHmm") + "*1649*X*004010~");
fileout.WriteLine("ST*850*13~");
fileout.WriteLine("BEG*00*SA*08272226001*" + DateTime.Now.ToString("yyyyMMdd") + "~");
fileout.WriteLine("REF*DP*089~");
fileout.WriteLine("DTM*002*20120104~");
fileout.WriteLine("N1*ST*" + name + "~");
fileout.WriteLine("N3*" + staddress + "~");
fileout.WriteLine("N4*" + city + "*" + state + "*" + zip + "~");
fileout.WriteLine("N1*RE**92*00103653341~");
fileout.WriteLine("PO1*1*6*EA*33.28*TE*IN*985880-542~");
fileout.WriteLine("PID*F*****CO2 BB PISTOL $ 5693~");
fileout.WriteLine("PO4*3*1*EA~");
fileout.WriteLine("CT*1~");
fileout.WriteLine("AMT*1*199.68~");
fileout.WriteLine("SE*16*13~");
}
}
//File.Delete(@"C:\onlinesales\neworders.xml");
}
}
}
【问题讨论】:
-
xml文档有命名空间吗?
标签: c# xml visual-studio-2008 foreach