如何正确迭代所有行以获取字段而不重新打印行?

时间:2018-02-02 01:14:50

标签: c# asp.net xml

数据如下: 包名-noofpackage重量 纸箱-6-43.2 鼓4-11.6 袋2-10.6

我只需为每个包类型生成包含详细信息的xml。 6个用于纸箱,4个用于鼓,2个用于包。因为我需要迭代所有包类型以获取noofpackage字段,如何阻止它为下一个包类型重新生成。以下是xml的结果,这是不正确的。

for (int i = 0; i < lstPackShipDtl.Count; i++)
            {
               int numOfPackage = Convert.ToInt32(lstPackShipDtl[i].NoOfPackage);
                    foreach (var PackSDtl in lstPackShipDtl)
                    {
                        for (int j = 0; j < numOfPackage; j++)
                        {
                            XmlNode PackageDetail = xmlDoc.CreateElement("PackageDetail");

                            XmlElement Weight = xmlDoc.CreateElement("Weight");
                            Weight.InnerText = PackSDtl.Weight;
                            PackageDetail.AppendChild(Weight);

                            XmlElement PackageDimensionsLength = xmlDoc.CreateElement("PackageDimensionsLength");
                            PackageDimensionsLength.InnerText = PackSDtl.DimensionLength;
                            PackageDetail.AppendChild(PackageDimensionsLength);

                            XmlElement PackageDimensionsWidth = xmlDoc.CreateElement("PackageDimensionsWidth");
                            PackageDimensionsWidth.InnerText = PackSDtl.DimensionWidth;
                            PackageDetail.AppendChild(PackageDimensionsWidth);

                            XmlElement PackageDimensionsHeight = xmlDoc.CreateElement("PackageDimensionsHeight");
                            PackageDimensionsHeight.InnerText = PackSDtl.DimensionHeight;
                            PackageDetail.AppendChild(PackageDimensionsHeight);

                            PackageAndShipmentsDetails.AppendChild(PackageDetail);
                        }
                    }
                   ShipmentDetails.AppendChild(PackageAndShipmentsDetails);
            }


-<PackageAndShipmentsDetails>

<NumberOfPackages>3</NumberOfPackages>

<TotalsCarriageValue> 600.00</TotalsCarriageValue>

<TotalsCarriageValueCurrency>EUR</TotalsCarriageValueCurrency>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>11.6</Weight>

<PackageDimensionsLength>2</PackageDimensionsLength>

<PackageDimensionsWidth>2</PackageDimensionsWidth>

<PackageDimensionsHeight>2</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>43.2</Weight>

<PackageDimensionsLength>31</PackageDimensionsLength>

<PackageDimensionsWidth>23</PackageDimensionsWidth>

<PackageDimensionsHeight>22</PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>


-<PackageDetail>

<Weight>10.6</Weight>

<PackageDimensionsLength> </PackageDimensionsLength>

<PackageDimensionsWidth> </PackageDimensionsWidth>

<PackageDimensionsHeight> </PackageDimensionsHeight>

</PackageDetail>

</PackageAndShipmentsDetails>

2 个答案:

答案 0 :(得分:0)

如果我不理解你想要做什么,我很抱歉,但似乎你有太多的迭代。试试这个:

foreach (var PackSDtl in lstPackShipDtl)
{
    int numOfPackage = Convert.ToInt32(PackSDtl.NoOfPackage);
    for (int j = 0; j < numOfPackage; j++)
    {
        XmlNode PackageDetail = xmlDoc.CreateElement("PackageDetail");

        XmlElement Weight = xmlDoc.CreateElement("Weight");
        Weight.InnerText = PackSDtl.Weight;
        PackageDetail.AppendChild(Weight);

        XmlElement PackageDimensionsLength = xmlDoc.CreateElement("PackageDimensionsLength");
        PackageDimensionsLength.InnerText = PackSDtl.DimensionLength;
        PackageDetail.AppendChild(PackageDimensionsLength);

        XmlElement PackageDimensionsWidth = xmlDoc.CreateElement("PackageDimensionsWidth");
        PackageDimensionsWidth.InnerText = PackSDtl.DimensionWidth;
        PackageDetail.AppendChild(PackageDimensionsWidth);

        XmlElement PackageDimensionsHeight = xmlDoc.CreateElement("PackageDimensionsHeight");
        PackageDimensionsHeight.InnerText = PackSDtl.DimensionHeight;
        PackageDetail.AppendChild(PackageDimensionsHeight);

        PackageAndShipmentsDetails.AppendChild(PackageDetail);
    }
    ShipmentDetails.AppendChild(PackageAndShipmentsDetails);
}

希望它有所帮助。

答案 1 :(得分:0)

使用xml linq和分组包:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            var groups = doc.Descendants("PackageDetail")
                .GroupBy(x => new {
                    Weight = (string)x.Element("Weight"),
                    PackageDimensionsLength = (string)x.Element("PackageDimensionsLength"),
                    PackageDimensionsWidth = (string)x.Element("PackageDimensionsWidth"),
                    PackageDimensionsHeight = (string)x.Element("PackageDimensionsHeight")
                }).ToList();

            foreach (var group in groups)
            {
                foreach (XElement packageDetail in group.Skip(1))
                {
                    packageDetail.Remove();
                }
            }


        }
    }
}