Как написать файл XML с одним дочерним узлом внутри каждого родительского узла? - PullRequest
0 голосов
/ 24 января 2019

То, что я пытаюсь сделать, это то, что написано в заголовке, написать один тег E1EDL11 внутри каждого E1EDL24, который есть в файле.Работает только для первых тегов E1EDL24 и E1EDL11.Начиная со второго тега E1EDL11, следующие записываются внутри первого тега E1EDL24.

Это часть кода в C #, которая у меня есть:

foreach (var vvActualProtDetail in vvProtDetails)
{
    MstProduct vvProduct = new MstProduct()
    { 
        MstBusinessPartnerId = vvCustomerInternalCode, 
        Code = vvActualProtDetail.Product.Trim()
    };

    vvProduct.SelectNew();

    if (vvProduct.Id > 0)
    {
        vvDsSchema.Tables["E1EDL24"].Rows.Add(new object[] {
                                                                "1",
                                                                vvActualProtDetail.RowNumber.ToString().Length < 6 ? vvActualProtDetail.RowNumber.ToString().PadLeft(6, '0') : vvActualProtDetail.RowNumber.ToString(),       //POSNR
                                                                vvActualProtDetail.Product,                                             //MATNR
                                                                "CO01",                                                                 //WERKS
                                                                vvActualProtDetail.WH,                                                  //LGORT
                                                                vvActualProtDetail.Lot,                                                 //CHARG
                                                                vvActualProtDetail.QuantitySent/vvActualProtDetail.Incoming_Quantity,   //LFIMG
                                                                vvActualProtDetail.UoM,                                                 //VRKME
                                                                null,
                                                                "0"
                                                            });

        if (vvActualProtDetail.SN != null && vvActualProtDetail.SN.Trim() != "")
        {
            vvDsSchema.Tables["E1EDL11"].Rows.Add(new object[] {
                                                                    "1",
                                                                    vvActualProtDetail.SN.Trim(),   //SERNR
                                                                    "0"
                                                                });
        }
    }
}

Это XSD-файл, который яЯ использую, чтобы прочитать и написать файл:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Liquid Technologies Online Tools 1.0 (https://www.liquid-technologies.com) -->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="DELVRY03">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="IDOC">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="EDI_DC40">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="TABNAM" type="xs:string" />
                    <xs:element name="DIRECT" type="xs:unsignedByte" />
                    <xs:element name="IDOCTYP" type="xs:string" />
                    <xs:element name="MESTYP" type="xs:string" />
                    <xs:element name="SNDPOR" type="xs:string" />
                    <xs:element name="SNDPRT" type="xs:string" />
                    <xs:element name="SNDPRN" type="xs:string" />
                    <xs:element name="SNDSAD" type="xs:string" />
                    <xs:element name="RCVPOR" type="xs:string" />
                    <xs:element name="RCVPRT" type="xs:string" />
                    <xs:element name="RCVPRN" type="xs:string" />
                  </xs:sequence>
                  <xs:attribute name="SEGMENT" type="xs:unsignedByte" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="E1EDL20">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="VBELN" type="xs:string" />
                    <xs:element maxOccurs="unbounded" name="E1EDL18">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="QUALF" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="SEGMENT" type="xs:unsignedByte" use="required" />
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="E1EDL24">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="POSNR" type="xs:string" />
                          <xs:element name="MATNR" type="xs:string" />
                          <xs:element name="WERKS" type="xs:string" />
                          <xs:element name="LGORT" type="xs:string" />
                          <xs:element name="CHARG" type="xs:string" />
                          <xs:element name="LFIMG" type="xs:decimal" />
                          <xs:element name="VRKME" type="xs:string" />
                          <xs:element name="E1EDL11">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="SERNR" type="xs:string" />
                              </xs:sequence>
                              <xs:attribute name="SEGMENT" type="xs:unsignedByte" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="SEGMENT" type="xs:unsignedByte" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="SEGMENT" type="xs:unsignedByte" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="BEGIN" type="xs:unsignedByte" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Вот что я получаю в данный момент:

<?xml version="1.0" encoding="UTF-8"?>
<DELVRY03>
  <IDOC BEGIN="1">
    <EDI_DC40 SEGMENT="1">
      <TABNAM>EDI_DC40</TABNAM>
      <DIRECT>1</DIRECT>
      <IDOCTYP>DELVRY03</IDOCTYP>
      <MESTYP>SHPCON</MESTYP>
      <SNDPOR>DELLBOOMI</SNDPOR>
      <SNDPRT>LS</SNDPRT>
      <SNDPRN>3PLBOMI_CO</SNDPRN>
      <SNDSAD>NIPAS2</SNDSAD>
      <RCVPOR>SAPDE1</RCVPOR>
      <RCVPRT>LS</RCVPRT>
      <RCVPRN>DE1CLNT160</RCVPRN>
    </EDI_DC40>
    <E1EDL20 SEGMENT="1">
      <VBELN>0180347093</VBELN>
      <E1EDL18 SEGMENT="1">
        <QUALF>PGI</QUALF>
      </E1EDL18>
      <E1EDL18 SEGMENT="1">
        <QUALF>PIC</QUALF>
      </E1EDL18>
      <E1EDL18 SEGMENT="1">
        <QUALF>CHG</QUALF>
      </E1EDL18>
      <E1EDL24 SEGMENT="1">
        <POSNR>000010</POSNR>
        <MATNR>61000</MATNR>
        <WERKS>CO01</WERKS>
        <LGORT>0001</LGORT>
        <CHARG>3PL_610051</CHARG>
        <LFIMG>1</LFIMG>
        <VRKME>EA</VRKME>
        <E1EDL11 SEGMENT="1">
          <SERNR>3PL_610051</SERNR>
        </E1EDL11>
        <E1EDL11 SEGMENT="1">
          <SERNR>3PL_610052</SERNR>
        </E1EDL11>
        <E1EDL11 SEGMENT="1">
          <SERNR>3PL_610053</SERNR>
        </E1EDL11>
        <E1EDL11 SEGMENT="1">
          <SERNR>3PL_610054</SERNR>
        </E1EDL11>
        <E1EDL11 SEGMENT="1">
          <SERNR>3PL_610055</SERNR>
        </E1EDL11>
      </E1EDL24>
      <E1EDL24 SEGMENT="1">
        <POSNR>000020</POSNR>
        <MATNR>61000</MATNR>
        <WERKS>CO01</WERKS>
        <LGORT>0001</LGORT>
        <CHARG>3PL_610052</CHARG>
        <LFIMG>1</LFIMG>
        <VRKME>EA</VRKME>
      </E1EDL24>
      <E1EDL24 SEGMENT="1">
        <POSNR>000030</POSNR>
        <MATNR>61000</MATNR>
        <WERKS>CO01</WERKS>
        <LGORT>0001</LGORT>
        <CHARG>3PL_610053</CHARG>
        <LFIMG>1</LFIMG>
        <VRKME>EA</VRKME>
      </E1EDL24>
      <E1EDL24 SEGMENT="1">
        <POSNR>000040</POSNR>
        <MATNR>61000</MATNR>
        <WERKS>CO01</WERKS>
        <LGORT>0001</LGORT>
        <CHARG>3PL_610054</CHARG>
        <LFIMG>1</LFIMG>
        <VRKME>EA</VRKME>
      </E1EDL24>
      <E1EDL24 SEGMENT="1">
        <POSNR>000050</POSNR>
        <MATNR>61000</MATNR>
        <WERKS>CO01</WERKS>
        <LGORT>0001</LGORT>
        <CHARG>3PL_610055</CHARG>
        <LFIMG>1</LFIMG>
        <VRKME>EA</VRKME>
      </E1EDL24>
    </E1EDL20>
  </IDOC>
</DELVRY03>

Но реальный результат должен быть таким:

<?xml version="1.0" encoding="UTF-8"?>
<DELVRY03>
    <IDOC BEGIN="1">
        <EDI_DC40 SEGMENT="1">
            <TABNAM>EDI_DC40</TABNAM>
            <DIRECT>1</DIRECT>
            <IDOCTYP>DELVRY03</IDOCTYP>
            <MESTYP>SHPCON</MESTYP>
            <SNDPOR>DELLBOOMI</SNDPOR>
            <SNDPRT>LS</SNDPRT>
            <SNDPRN>3PLBOMI_CO</SNDPRN>
            <SNDSAD>NIPAS2</SNDSAD>
            <RCVPOR>SAPDE1</RCVPOR>
            <RCVPRT>LS</RCVPRT>
            <RCVPRN>DE1CLNT160</RCVPRN>
        </EDI_DC40>
        <E1EDL20 SEGMENT="1">
            <VBELN>0180347093</VBELN>
            <E1EDL18 SEGMENT="1">
                <QUALF>PGI</QUALF>
            </E1EDL18>
            <E1EDL18 SEGMENT="1">
                <QUALF>PIC</QUALF>
            </E1EDL18>
            <E1EDL18 SEGMENT="1">
                <QUALF>CHG</QUALF>
            </E1EDL18>
            <E1EDL24 SEGMENT="1">
                <POSNR>000010</POSNR>
                <MATNR>61000</MATNR>
                <WERKS>CO01</WERKS>
                <LGORT>0001</LGORT>
                <CHARG>3PL_610051</CHARG>
                <LFIMG>1</LFIMG>
                <VRKME>EA</VRKME>
                <E1EDL11 SEGMENT="1">
                    <SERNR>3PL_610051</SERNR>
                </E1EDL11>
            </E1EDL24>
            <E1EDL24 SEGMENT="1">
                <POSNR>000020</POSNR>
                <MATNR>61000</MATNR>
                <WERKS>CO01</WERKS>
                <LGORT>0001</LGORT>
                <CHARG>3PL_610052</CHARG>
                <LFIMG>1</LFIMG>
                <VRKME>EA</VRKME>
                <E1EDL11 SEGMENT="1">
                    <SERNR>3PL_610052</SERNR>
                </E1EDL11>
            </E1EDL24>
            <E1EDL24 SEGMENT="1">
                <POSNR>000030</POSNR>
                <MATNR>61000</MATNR>
                <WERKS>CO01</WERKS>
                <LGORT>0001</LGORT>
                <CHARG>3PL_610053</CHARG>
                <LFIMG>1</LFIMG>
                <VRKME>EA</VRKME>
                <E1EDL11 SEGMENT="1">
                    <SERNR>3PL_610053</SERNR>
                </E1EDL11>
            </E1EDL24>
            <E1EDL24 SEGMENT="1">
                <POSNR>000040</POSNR>
                <MATNR>61000</MATNR>
                <WERKS>CO01</WERKS>
                <LGORT>0001</LGORT>
                <CHARG>3PL_610054</CHARG>
                <LFIMG>1</LFIMG>
                <VRKME>EA</VRKME>
                <E1EDL11 SEGMENT="1">
                    <SERNR>3PL_610054</SERNR>
                </E1EDL11>
            </E1EDL24>
            <E1EDL24 SEGMENT="1">
                <POSNR>000050</POSNR>
                <MATNR>61000</MATNR>
                <WERKS>CO01</WERKS>
                <LGORT>0001</LGORT>
                <CHARG>3PL_610055</CHARG>
                <LFIMG>1</LFIMG>
                <VRKME>EA</VRKME>
                <E1EDL11 SEGMENT="1">
                    <SERNR>3PL_610055</SERNR>
                </E1EDL11>
            </E1EDL24>
        </E1EDL20>
    </IDOC>
</DELVRY03>

Я ценю вашу помощь и сотрудничество.Я буду внимателен, если вам понадобится дополнительная информация об этом или если мне не хватит ясности в написании моего объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...