2011-01-07 11 views
1

Parsing brauche ich eine XML-Datei in C# zu analysieren ... Die Datei etwas, was wie folgt aussehen ....eine XML-Datei in C#

- <book> 
    <rank>1</rank> 
    <list_name>Chapter Books</list_name> 
    <bestsellers_date>2010-12-26</bestsellers_date> 
    <published_date>2011-01-09</published_date> 
    <weeks_on_list>11</weeks_on_list> 
    <rank_last_week>0</rank_last_week> 
    <asterisk>0</asterisk> 
    <dagger>0</dagger> 
- <book_details> 
- <book_detail> 
    <title>THE LOST HERO</title> 
    <description>A return to Camp Half-Blood and semi-divine characters old and new.</description> 
    <contributor>by Rick Riordan</contributor> 
    <author>Rick Riordan</author> 
    <contributor_note /> 
    <price>18.99</price> 
    <age_group>Ages 10 and up</age_group> 
    <publisher>Disney-Hyperion</publisher> 
    </book_detail> 
    </book_details> 
- <isbns> 
- <isbn> 
    <isbn13>9781423113393</isbn13> 
    <isbn10>142311339X</isbn10> 
    </isbn> 
    </isbns> 
- <reviews> 
- <review> 
    <book_review_link /> 
    <first_chapter_link /> 
    <sunday_review_link /> 
    <article_chapter_link>http://artsbeat.blogs.nytimes.com/2010/06/21/the-world-of-percy-jackson-lives-on-in-the-lost-hero/</article_chapter_link> 
    </review> 
    </reviews> 
    </book> 
- <book> 
    <rank>2</rank> 
    <list_name>Chapter Books</list_name> 
    <bestsellers_date>2010-12-26</bestsellers_date> 
    <published_date>2011-01-09</published_date> 
    <weeks_on_list>2</weeks_on_list> 
    <rank_last_week>0</rank_last_week> 
    <asterisk>0</asterisk> 
    <dagger>0</dagger> 
- <book_details> 
- <book_detail> 
    <title>THE GIFT</title> 
    <description>A sister and brother flex their new powers; a Witch and Wizard book.</description> 
    <contributor>by James Patterson and Ned Rust</contributor> 
    <author>James Patterson and Ned Rust</author> 
    <contributor_note /> 
    <price>17.99</price> 
    <age_group>Ages 10 and up</age_group> 
    <publisher>Little, Brown</publisher> 
    </book_detail> 
    </book_details> 
- <isbns> 
- <isbn> 
    <isbn13>9780316036252</isbn13> 
    <isbn10>0316036250</isbn10> 
    </isbn> 
- <isbn> 
    <isbn13>9780316122214</isbn13> 
    <isbn10>0316122211</isbn10> 
    </isbn> 
    </isbns> 
- <reviews> 
- <review> 
    <book_review_link /> 
    <first_chapter_link /> 
    <sunday_review_link /> 
    <article_chapter_link /> 
    </review> 
    </reviews> 
    </book> 

Die Daten zwischen den Tags Buch ein Rekord. Jetzt enthält der zweite Datensatz zwei ISBNs, also sollten solche Daten als 2 Datensätze in der Tabelle (mit allen gleichen aber unterschiedlichen ISBNs)

+0

Ich stimme nicht zu "sollte als 2 Datensätze aufgefüllt werden". ISBN-10 und ISBN-13 sind zwei verschiedene Dinge, und sie sollten zwei verschiedene Spalten in Ihrer Datenbank sein (oder zwei verschiedene Felder in Ihren Objekten). Das Duplizieren des Datensatzes ist eine klassische Denormalisierung, die zu Datenintegritätsproblemen führt (was ist, wenn Sie das Buch mit seiner ISBN-10 suchen, ändern und später nach seiner ISBN-13 durchsuchen?) – tdammers

+0

Ich glaube, Sie haben mich falsch ... Es gibt 2 ISBN13 und ISBN10 in der zweiten Reihe von Daten, es gibt verschiedene Spalten für ISBN 10 & isbn 13, so dass diese als zwei Datensätze mit dem gleichen Titel, Autor und alles mit aber mit diff ISBN10 & befüllt werden müssen ISBN13 da gibt es 2 für jeden –

Antwort

1

Verwenden Sie xsd.exe! Sie können eine XML-Beispieldatei erstellen, die xsd.exe zweimal ausführen (zuerst um ein XML-Schema aus der XML-Datei abzuleiten und dann eine C# -Klasse aus diesem Schema zu erstellen) und Sie erhalten eine C# -Klasse, die dieses XML deserialisieren können sollte in ein C# Objekt .:

C:\> xsd.exe (your-xml-file).xml  -- this generates a (your-xml-file).xsd file 
C:\> xsd.exe (your-XSD-file).xsd /C -- this generates the C# class from the XSD 

die xsd.exe Dienstprogramm Teil des Microsoft Windows SDK derzeit auf v7.1 sind, die Sie von hier kostenlos herunterladen können: http://msdn.microsoft.com/en-us/windows/bb980924

Jetzt mit dieser Klasse in der Hand, Sie sollte in der Lage sein, etwas wie zu schreiben:

XmlSerializer ser = new XmlSerializer(typeof(book)); 
var result = ser.Deserialize(@"C:\yourxmlfile.xml"); 
+0

Danke das hat mir geholfen :) –