开发者

Get child element in another child element of XML

开发者 https://www.devze.com 2023-04-07 02:49 出处:网络
I have a XML file that goes like this... (the XML file was taken from web services [WCF] after passing some value into it.)

I have a XML file that goes like this... (the XML file was taken from web services [WCF] after passing some value into it.)

<Title>
  <Questions>
    <QuestionID> 1 </QuestionID>
    <QuestionType> Quiz </QuestionType>
    <Question> What is the shape? </Question>
    <SubQuestionSequence> Part 1 </SubQuestionSequence>
    <SubQuestions>
           <Keywords> Ring </Keywords>
           <ParentQuestionID> 1 </ParentQuestionID>
    </SubQuestions>
    <SubQuestionSequence> Part2 </SubQuestionSequence>
    <SubQuestions>
           <Keywords> Round </Keywords>
           <ParentQuestionID> 1 </ParentQuestionID>             
    </SubQuestions>
  </Questions>
</Title>

The methods to take child elements as below (written in C#), the commented area is supposed to call the class of subQuestion, but i'm not sure how to write that part :

public class Questions {

    public int QuestionID { get; set; }
    public string QuestionType { get; set; }
    public string Question { get; set; }
    public string SubQuestionSequence { get; set; }            
    //suppose to call subQuestion here 
}

public class SubQuestion {

    public string Keywords { get ; set ; }
    public int ParentQuestionID { get; set; }

}

The actual code behind of the file, also the query area, i does not know how to call if they have another sub section:

void client_GetQuestionCompleted(object sender, GetQuestionCompletedEventArgs e)
{
     if (e.Error != null)
         return;

     string result = e.Result.Nodes[0].ToString();
     XDocument doc = XDocument.Parse(result);

     var QuestionDetails = from Query in doc.Descendants("QuestionDetail")
                           select new Questions
                           {
                                QuestionID = (int)Query.Element("QuestionID"),
                                QuestionType = (string)Query.Element("QuestionType"),
                                Question = (string)Query.Element("Question"),
                                SubQuestionSequence = (string)Query.E开发者_如何学运维lement("SubQuestionSequence")
                           };

     int z = 0;
     foreach (var QuestionDetail in QuestionDetails)
     {
           qID = QuestionDetail.QuestionID;
           qType = QuestionDetail.QuestionType;
           quest = QuestionDetail.Question;
           subQS = QuestionDetail.SubQuestionSequence;

           z++;

     }
}

As you can see from the top, how can i take the child elements of SubQuestions (The keywords and ParentQuestionID) where SubQuestion itself already is a child element ?

[edit] how can i retrieve the repeated element in the child element ? I want some part to loop and retrieve data, and some doesn't need to loop to retrieve.

   int z = 0;
   foreach (var QuestionDetail in QuestionDetails)
   {
        qID = QuestionDetail.QuestionID;
        qType = QuestionDetail.QuestionType;
        quest = QuestionDetail.Question;
        subQS[z] = QuestionDetail.SubQuestionSequence;
        //doing it this way, i can only retrieve one row of record only, 
        //even though i used an array to save.
        subKeyword[z] = QuestionDetail.SubQuestion.Keywords;            

        z++;

   }


As long as there is only a single SubQuestions element you can simply access Query.Element("SubQuestions").Element("Keywords") respectively Query.Element("SubQuestions").Element("ParentQuestionID").

[edit] As for you class with an object of the type SubQuestion you would simply use

public class Questions {

    public int QuestionID { get; set; }
    public string QuestionType { get; set; }
    public string Question { get; set; }
    public string SubQuestionSequence { get; set; }            
    public SubQuestion SubQuestion{ get; set; }
}

public class SubQuestion {

    public string Keywords { get ; set ; }
    public int ParentQuestionID { get; set; }

}

and then in your query you can use e.g.

 var QuestionDetails = from Query in doc.Descendants("QuestionDetail")
                       select new Questions
                       {
                            QuestionID = (int)Query.Element("QuestionID"),
                            QuestionType = (string)Query.Element("QuestionType"),
                            Question = (string)Query.Element("Question"),
                            SubQuestionSequence = (string)Query.Element("SubQuestionSequence"),
                            SubQuestion = new SubQuestion() {
                               Keywords = (string)Query.Element("SubQuestions").Element("Keywords"),
                               ParentQuestionID = (int)Query.Element("SubQuestions").Element("ParentQuestionID")
                            }
                       };
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号