2009-04-15 22 views
0

Dies ist meine XML-Datei:Lesen von XML in DataSet

<?xml version="1.0" standalone="no" ?> 
<!-- This file represents The Details of the user and the responces: --> 
<Survey> 
    <Clientdetails> 
    <ClientName xmlns="yash" /> 
    <ClientCompanyName xmlns="lnt" /> 
    <ClientTelNo. xmlns="546" /> 
    <ClientMobileNo xmlns="56" /> 
    <ClientEMail xmlns="56" /> 
    </Clientdetails> 
    <ClientResponces> 
    <Question1> 
     <responce>1</responce> 
    </Question1> 
    <Question2> 
     <responce>2</responce> 
    </Question2> 
    <Question3> 
     <responce>3</responce> 
    </Question3> 
    <Question4> 
     <responce>3</responce> 
    </Question4> 
    <Question5> 
     <Question5.1> 
     <responce>3</responce> 
     </Question5.1> 
     <Question5.2> 
     <responce>3</responce> 
     </Question5.2> 
     <Question5.3> 
     <responce>2</responce> 
     </Question5.3> 
     <Question5.4> 
     <responce>3</responce> 
     </Question5.4> 
     <Question5.5> 
     <responce>3</responce> 
     </Question5.5> 
     <Question5.6> 
     <responce>3</responce> 
     </Question5.6> 
     <Question5.7> 
     <responce>3</responce> 
     </Question5.7> 
     <Question5.8> 
     <responce>2</responce> 
     </Question5.8> 
     <Question5.9> 
     <responce>1</responce> 
     </Question5.9> 
     <Question5.10> 
     <responce>2</responce> 
     </Question5.10> 
     <Question5.11> 
     <responce>0</responce> 
     </Question5.11> 
     <Question5.12> 
     <responce>0</responce> 
     </Question5.12> 
     <Question5.13> 
     <responce>0</responce> 
     </Question5.13> 
     <Question5.14> 
     <responce>0</responce> 
     </Question5.14> 
     <Question5.15> 
     <responce>0</responce> 
     </Question5.15> 
     <Question5.16> 
     <responce>0</responce> 
     </Question5.16> 
     <Question5.17> 
     <responce>0</responce> 
     </Question5.17> 
    </Question5> 
    </ClientResponces> 
</Survey> 

ich diese Daten in ein DataSet lesen möchten. Ich möchte nur die Antworten des Kunden, und für die 5. Frage möchte ich den Durchschnitt seiner 17 Unterfragen.

Zum Beispiel sollte der Datensatz nur diese enthält:

1 
2 
3 
3 
4 

Wie dies in C# tun?

+0

eh ?? Was ist deine Frage? Sie können einfach die XML-Datei öffnen und die Daten einfügen. – Shoban

+0

Ihr XML-Beispiel fehlt? – eddiegroves

+0

Bearbeitete die Frage, um XML richtig anzuzeigen. – Shoban

Antwort

1

Versuchen

XmlDataDocument doc = new XmlDataDocument(); 
doc.LoadXml(<your string>); 
DataSet ds = doc.DataSet; 

Sie dann LINQ aus dem Dokument verschiedene auswählen können.

Update

foreach (XmlNode node in doc.SelectNodes("\\Survey\ClientResponses")) 
    { 
    string text = node.InnerText; 
    } 

(nicht getestet! Sie werden verschachtelte Fälle schwierig sein!)

+0

Kommen Sie zu Ihrem Kommentar - er kann ** das ** XML nicht in ein Dataset laden, weil es so furchtbar, entsetzlich geborsten ist. –

+0

Wahr ... es ist ein bisschen durcheinander. –

3

Das xml ziemlich ... schrecklich. Mein erster Vorschlag würde sein, es durch eine xslt-Umwandlung auszuführen, um es in etwas Normales zu bringen, das mit Load geladen werden kann. Derzeit missbraucht es Namespaces schrecklich.

Alternativ, vergessen Sie DataSet, und analysieren Sie es mit XmlDocument oder ähnlichem.

Hier ist ein Ansatz mit XmlDocument (und mit LINQ nur für den Durchschnitt, ein paar Zeilen Code speichern):

Zum Beispiel von normalen xml:

<question num="1"> 
    <response>1</response> 
</question> 
... 
<question num="5"> 
    <response num="1">1</response> 
    <response num="2">3</response> 
    ... 
</question> 

oder etwas Vergleichbares. Verwenden Sie den Elementnamen nicht zum Ableiten der Identität.

+0

-1. Er kann XML nicht in ein Dataset laden und Sie schlagen XSLT vor? Ja, richtig, aber hilft es. –

+0

+1. XmlDocument.SelectNodes (xpath) netter;) –

+0

Nicht sicher, ob Sie ein "ID" -Attribut enthalten sollten, das doppelte Werte enthalten kann. – Tomalak