none
XML teilweise auslesen RRS feed

  • Frage

  • Hallo, ich möchte aus einem XML String mir einige Daten auslesen und diese in Steuerelemente als Text setzen.

      public partial class MainPage : PhoneApplicationPage
        {
            StringBuilder output = new StringBuilder();
            string xmlstring =
                @"<QuestionDB>
                    <Question ID='1'>
                        <Question>Welchen Tag haben wir heute?</Question>
                        <answer>Montag</answer>
                        <answer>Dienstag</answer>
                  </Question>       
                </QuestionDB>";
    
            // Konstruktor
            public MainPage()
            {
                InitializeComponent();
                testc();
            }
    
            private void testc()
            {
                XDocument doc = XDocument.Parse(xmlstring);
                var query = from c in doc.Descendants("Question")
                            where c.Element("ID").Value == "1"
                            select new Question
                            {
                                // [...]
                            };
            }

    Bekomme bei "select new Question", Typ oder Namespacename Question konnte nicht gefunden werden. Kann mir wer helfen?

    • Bearbeitet as_1985 Freitag, 17. Februar 2012 00:50
    Donnerstag, 16. Februar 2012 22:32

Antworten

  • Somit erhalte ich in query.Single() Alle Elemente die in ID 2 zu finden waren. Die Frage stellt sich nun, wie kann ich das nun auswerten? Sprich ich möchte in Variable string x den Wert aus Question.

    Hallo as_1985,

    Schau Dir mal folgenden Code an. Vielleicht kann er Dir weiterhelfen.

    Im folgenden Code bekommst Du in string x den Wert „Zweiter Tag“ (aus Question) der für ID=2 zuständig ist.

    [TestXML.xml]

    <Questions>
        <row>
            <ID>1</ID>
                <Question>Welchen Tag haben wir heute?</Question>
                    <Answers>
                        <answer>Montag</answer>
                        <answer>Dienstag</answer>
                        <answer>Bla</answer>
                        <answer>Bummm</answer>
                    </Answers>
        </row>
        <row>
            <ID>2</ID>
                <Question>Zweiter Tag</Question>
                    <Answers>
                        <answer>Montag</answer>
                        <answer>Dienstag</answer>
                        <answer>Bla</answer>
                        <answer>Bummm</answer>
                    </Answers>
        </row>
    </Questions>

    [C#]

            public class Author
            {
                public string userID { get; set; }
                public string userName { get; set; }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                string FullPath = @"C:\Temp\TestXML.xml";
            
                XDocument _charSheet = XDocument.Load(FullPath);
    
                var _charInfo = from item in _charSheet.Root.Descendants("row")
                                select new Author
                                {
                                    userID = item.Element("ID").Value,
                                    userName = item.Element("Question").Value
                                };
    
                string IDtoFind = "2";
    
                List<Author> Authors = _charInfo.ToList();
    
                // Find author by its ID.
                Author result = Authors.Find(delegate(Author bk)
                {
                    return bk.userID == IDtoFind;
                });
    
                if (result != null)
                {
                    string x = result.userName;
                    //MessageBox.Show(x);
                }
                else
                {
                    //Console.WriteLine("\nNot found: {0}", IDtoFind);
                }

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert as_1985 Montag, 5. März 2012 21:50
    Montag, 5. März 2012 17:53

Alle Antworten

  • Du hast zweimal den Question- und answer-Tag drin. Schreibe dein XML so, dann sollte es funktionieren:

    <QuestionDB>
       <Questions>
          <ID>1</ID>
          <Question>Welchen Tag haben wir heute?</Question>
             <Answers>
                        <answer>Montag</answer>
                        <answer>Dienstag</answer>
             </Answers>
       </Questions>       
    </QuestionDB>

    Freitag, 17. Februar 2012 18:54
  • Hallo, danke für deine Antwort.

    Jedoch immernoch das selbe Problem:

    Fehler 1 Der Typ- oder Namespacename "Question" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)

    Der wird hier angezeigt "select new Question"

    Kann ich im tag auch sowas mit angegeben <anwer correct>Montag</answer> ? Ich möchte eine Art Quiz erstellen und falsche Lösungen dadurch vorschlagen und natürlich die korrekte.

    Freitag, 17. Februar 2012 19:36
  • Hi,

    hast du auch eine Klasse Question definiert?

    Zu deinem Tag: Du kannst etwas, wie <answer result=false>Montag</answer> machen.

    Gruß, Peter


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Samstag, 18. Februar 2012 08:59
  • Nein, aber wir kommen den jetzt näher :)

    XDocument doc = XDocument.Parse(xmlstring);


     string xmlstring =
    
                @" 
                <Questions> 
                <row> 
                      <ID>1</ID> 
                      <Question>Welchen Tag haben wir heute?</Question> 
                         <Answers> 
                                    <answer>Montag</answer> 
                                    <answer>Dienstag</answer> 
                                    <answer>Bla</answer> 
                                    <answer>Bummm</answer> 
                         </Answers> 
                </row> 
                <row> 
                    <ID>2</ID> 
                      <Question>Zweiter Tag</Question> 
                         <Answers> 
                                    <answer>Montag</answer> 
                                    <answer>Dienstag</answer> 
                                    <answer>Bla</answer> 
                                    <answer>Bummm</answer> 
                         </Answers> 
    
                </row> 
                </Questions>        
                "; 


                var query = from c in doc.Descendants("row")
                            where c.Element("ID").Value == "2"
                            select c;

        query.Single();

    Somit erhalte ich in query.Single() Alle Elemente die in ID 2 zu finden waren. Die Frage stellt sich nun, wie kann ich das nun auswerten? Sprich ich möchte in Variable string x den Wert aus Question.

    Samstag, 18. Februar 2012 09:49
  • Somit erhalte ich in query.Single() Alle Elemente die in ID 2 zu finden waren. Die Frage stellt sich nun, wie kann ich das nun auswerten? Sprich ich möchte in Variable string x den Wert aus Question.

    Hallo as_1985,

    Schau Dir mal folgenden Code an. Vielleicht kann er Dir weiterhelfen.

    Im folgenden Code bekommst Du in string x den Wert „Zweiter Tag“ (aus Question) der für ID=2 zuständig ist.

    [TestXML.xml]

    <Questions>
        <row>
            <ID>1</ID>
                <Question>Welchen Tag haben wir heute?</Question>
                    <Answers>
                        <answer>Montag</answer>
                        <answer>Dienstag</answer>
                        <answer>Bla</answer>
                        <answer>Bummm</answer>
                    </Answers>
        </row>
        <row>
            <ID>2</ID>
                <Question>Zweiter Tag</Question>
                    <Answers>
                        <answer>Montag</answer>
                        <answer>Dienstag</answer>
                        <answer>Bla</answer>
                        <answer>Bummm</answer>
                    </Answers>
        </row>
    </Questions>

    [C#]

            public class Author
            {
                public string userID { get; set; }
                public string userName { get; set; }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                string FullPath = @"C:\Temp\TestXML.xml";
            
                XDocument _charSheet = XDocument.Load(FullPath);
    
                var _charInfo = from item in _charSheet.Root.Descendants("row")
                                select new Author
                                {
                                    userID = item.Element("ID").Value,
                                    userName = item.Element("Question").Value
                                };
    
                string IDtoFind = "2";
    
                List<Author> Authors = _charInfo.ToList();
    
                // Find author by its ID.
                Author result = Authors.Find(delegate(Author bk)
                {
                    return bk.userID == IDtoFind;
                });
    
                if (result != null)
                {
                    string x = result.userName;
                    //MessageBox.Show(x);
                }
                else
                {
                    //Console.WriteLine("\nNot found: {0}", IDtoFind);
                }

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert as_1985 Montag, 5. März 2012 21:50
    Montag, 5. März 2012 17:53