Xml XElement中的多个值
我必须将csv转换为xml,并使用xsd进行验证 我的问题是,我的输出与xsd不同 我现在不知道怎么做( 这是我的xsd代码: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
<?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");
}