Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XElement中的多个值_Xml_Xsd_Linq To Xml_Grouping_Xelement - Fatal编程技术网

Xml XElement中的多个值

Xml XElement中的多个值,xml,xsd,linq-to-xml,grouping,xelement,Xml,Xsd,Linq To Xml,Grouping,Xelement,我必须将csv转换为xml,并使用xsd进行验证 我的问题是,我的输出与xsd不同 我现在不知道怎么做( 这是我的xsd代码: <?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:distributor-import" xmlns:xs="http://www

我必须将csv转换为xml,并使用xsd进行验证

我的问题是,我的输出与xsd不同

我现在不知道怎么做(

这是我的xsd代码:

<?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>

我有以下输出:

<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>
 <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>

5632
9853
米格罗里诺
4000
巴塞尔
诺恩斯特拉斯80
804002
超薄保险
30
Stk
20131215
5622
9853
米格罗里诺
4000
巴塞尔
诺恩斯特拉斯80
801002
超薄保险
80
Stk
20131215
但我需要这个输出:

<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>
 <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>

5632
9853
米格罗里诺
4000
巴塞尔
诺恩斯特拉斯80
804002
超薄保险
30
Stk
20131215
5622
801002
超薄保险
80
Stk
20131215

我该怎么做?有人能帮我吗?

问题可能出在执行CSV到XML转换的代码中。但由于您没有在这里说明,我们无法帮助您。同时强调预期结果和实际结果之间的差异也会有所帮助。建议:XSD可能与此无关(您正在显示所需的输出),因此请替换为显示问题的简短工作代码示例。谢谢您的评论。我今天已经解决了我的问题。然后请自己添加一个答案,说明如何解决问题(然后您可以接受自己的答案)。
        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");
        }