-1

I must convert csv to xml and validate with xsd.

My problem is, that my outpot is not the same as xsd.

I don't now how to do it.. :(

This is my xsd code:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:distributor-import" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Distributor">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="Transaction">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="TransactionNr" type="xs:string" />
                    <xs:element name="AdressNr" type="xs:string" />
                    <xs:element name="Firma" type="xs:string" />
                    <xs:element name="PLZ" type="xs:unsignedShort" />
                    <xs:element name="Ort" type="xs:string" />
                    <xs:element name="Strasse" type="xs:string" />
                    <xs:element maxOccurs="unbounded" name="Artikel">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="ArtikelNr" type="xs:string" />
                          <xs:element name="Artikelbezeichnung" type="xs:string" />
                          <xs:element name="Menge" type="xs:int" />
                          <xs:element name="Einheit" type="xs:string" />
                          <xs:element name="Lieferdatum" type="xs:unsignedInt" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

I have this output:

<Distributor name="Lekkerland">
    <Transaction>
      <TransactionNr>5632</TransactionNr>
      <AdressNr>9853</AdressNr>
      <Firma>Migrolino</Firma>
      <PLZ>4000</PLZ>
      <Ort>Basel</Ort>
      <Strasse>Nauenstrasse 80</Strasse>
      <Artikel>
        <ArtikelNr>804002</ArtikelNr>
        <Artikelbezeichnung>OCB Slim Premium</Artikelbezeichnung>
        <Menge>30</Menge>
        <Einheit>Stk</Einheit>
        <Lieferdatum>20131215</Lieferdatum>
      </Artikel>
    </Transaction>
  </Distributor>
  <Distributor name="Lekkerland">
    <Transaction>
      <TransactionNr>5622</TransactionNr>
      <AdressNr>9853</AdressNr>
      <Firma>Migrolino</Firma>
      <PLZ>4000</PLZ>
      <Ort>Basel</Ort>
      <Strasse>Nauenstrasse 80</Strasse>
      <Artikel>
        <ArtikelNr>801002</ArtikelNr>
        <Artikelbezeichnung>OCB Slim Premium</Artikelbezeichnung>
        <Menge>80</Menge>
        <Einheit>Stk</Einheit>
        <Lieferdatum>20131215</Lieferdatum>
      </Artikel>
    </Transaction>
  </Distributor>

but I need this output:

 <Distributor name="Lekkerland">
    <Transaction>
      <TransactionNr>5632</TransactionNr>
      <AdressNr>9853</AdressNr>
      <Firma>Migrolino</Firma>
      <PLZ>4000</PLZ>
      <Ort>Basel</Ort>
      <Strasse>Nauenstrasse 80</Strasse>
      <Artikel>
        <ArtikelNr>804002</ArtikelNr>
        <Artikelbezeichnung>OCB Slim Premium</Artikelbezeichnung>
        <Menge>30</Menge>
        <Einheit>Stk</Einheit>
        <Lieferdatum>20131215</Lieferdatum>
      </Artikel>
    </Transaction>
    <Transaction>
      <TransactionNr>5622</TransactionNr>
      <Artikel>
        <ArtikelNr>801002</ArtikelNr>
        <Artikelbezeichnung>OCB Slim Premium</Artikelbezeichnung>
        <Menge>80</Menge>
        <Einheit>Stk</Einheit>
        <Lieferdatum>20131215</Lieferdatum>
      </Artikel>
    </Transaction>
  </Distributor>

How can i do that? Is there anyone who can helps me?

  • The problem is likely to be in the code that performs the CSV to XML conversion. But as you haven't shown that here we cannot help you. Also highlighting the difference between expected and actual result would help. Suggestion: the XSD is probably irrelevant (you're showing the desired output), so replace with a ***short working code*** sample that shows the problem. – Richard Jul 23 '14 at 09:18
  • Then please add an answer yourself showing how you fixit (you can then accept you own answer). – Richard Jul 24 '14 at 11:49

1 Answers1

0
        foreach( var distributor in csvGroup.GroupBy(d => d.GetValue(distributorID)))
        {
            xmlDoc.Root.Add(

                             new  XElement(ns + "Distributor",
                             new XAttribute("name", distributor.Key)));

                             foreach (var transaction in distributor.GroupBy(b => b.GetValue(transactionID)))
                             {
                                 xmlDoc.Root.Elements(ns + "Distributor").Where(d => d.Attribute("name").Value == distributor.Key.ToString()).First().Add(

                                    new XElement(ns + "Transaction",
                                    new XElement(ns + "TransactionNr", transaction.Key),
                                     new XElement(ns + "AdressNr", transaction.First().GetValue(addressID)),
                                     new XElement(ns + "Firma", transaction.First().GetValue(companyID)),
                                     new XElement(ns + "PLZ", transaction.First().GetValue(postalID)),
                                     new XElement(ns + "Ort", transaction.First().GetValue(placeID)),
                                     new XElement(ns + "Strasse", transaction.First().GetValue(streetID))));

                                 foreach (var artikel in transaction)
                                 {

                                     xmlDoc.Root.Elements(ns + "Distributor").Where(d => d.Attribute("name").Value == distributor.Key.ToString()).First().Elements(ns + "Transaction").Where(t => t.Elements(ns + "TransactionNr").First().Value == transaction.Key.ToString()).First().Add(

                                         new XElement(ns + "Artikel",
                                         new XElement(ns + "ArtikelNr", artikel[articelID]),
                                         new XElement(ns + "Artikelbezeichnung", artikel[articeldescriptionID]),
                                         new XElement(ns + "Menge", artikel[amountID]),
                                         new XElement(ns + "Einheit", artikel[unitID]),
                                         new XElement(ns + "Lieferdatum", artikel[deliveryID])));
                                 }
                             }
                             xmlDoc.Save("xmldoc.xml");
                             xmlDoc.Save("c:/test.xml");
        }