我必须将csv转换为xml并使用xsd进行验证。
我的问题是,我的outpot与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>
我该怎么做?有没有人可以帮助我?
答案 0 :(得分: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");
}