读取xml字符串并填充列表集合

时间:2014-10-28 23:16:35

标签: c# xml c#-4.0 xml-serialization c#-3.0

我需要读取xml字符串并将值分配给list collection。我需要读取问题节点并将其分配给列表集合变量。同样,阅读答案并将其分配给列表集合变量。目前,问题和答案正在被覆盖而不是遍历到下一个节点。有人能告诉我问题是什么吗?

以下是代码

 XmlDocument xmlDocument = new XmlDocument();

            var fataQuestionnaire = @"<?xml version=""1.0"" encoding=""UTF-16""?>
                           <FatcaQuestionnaire xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
                             <QuestionAnswers>
                                  <QuestionAnswer>
                                    <Question>What is your source of wealth?</Question>
                                    <Answer>I am italian </Answer>
                                  </QuestionAnswer>
                                  <QuestionAnswer>
                                    <Question>What is your occupation and name of employer?</Question>
                                    <Answer>Bestinvest</Answer>
                                  </QuestionAnswer>
                                  <QuestionAnswer>
                                    <Question>Do you have a business or residence in?</Question>
                                    <Answer>Yes</Answer>
                                  </QuestionAnswer>
                                  <QuestionAnswer>
                                    <Question>How long have you lived outside of Albania</Question>
                                    <Answer>5 years</Answer>
                                  </QuestionAnswer>
                                  <QuestionAnswer>
                                    <Question>Do you return to Albania on a regular basis</Question>
                                    <Answer>Yes</Answer>
                                    <SubQuestionAnswer>
                                         <Question>How frequently?</Question>
                                         <Answer>every year</Answer>
                                    </SubQuestionAnswer>
                                  </QuestionAnswer>
                                  <QuestionAnswer>
                                    <Question>Do you have family in Albania?</Question>
                                    <Answer>Yes</Answer>
                                    <SubQuestionAnswer>
                                         <Question>Family relationship?</Question>
                                         <Answer>My parents lives there</Answer>
                                    </SubQuestionAnswer>
                                  </QuestionAnswer>
                                  <QuestionAnswer>
                                    <Question>Are you connected to the government of Albania?</Question>
                                    <Answer>Yes</Answer>
                                    <SubQuestionAnswer>
                                         <Question>Nature of association</Question>
                                          <Answer>I was an ex minister</Answer>
                                    </SubQuestionAnswer>
                                  </QuestionAnswer>
                                  <QuestionAnswer>
                                    <Question>Do you send or receive money from Albania?</Question>
                                    <Answer>Yes</Answer>
                                    <SubQuestionAnswer>
                                         <Question>How often and why?</Question>
                                         <Answer>Every month for my parents to live with.</Answer>
                                    </SubQuestionAnswer>
                                  </QuestionAnswer>
                             </QuestionAnswers>
                           </FatcaQuestionnaire>";

            XmlTextReader reader = new XmlTextReader(new StringReader(fataQuestionnaire));


            xmlDocument.Load(reader);

            XmlElement xmlRoot = xmlDocument.DocumentElement;
            if (xmlRoot != null)
            {
                XmlNodeList xnlNodes = xmlRoot.SelectNodes("/FatcaQuestionnaire/QuestionAnswers/QuestionAnswer");
               List<string> questionanswer = new List<string>();

            if (xnlNodes != null)
                foreach (XmlNode xndNode in xnlNodes)
                {
                    if (xndNode["Question"] != null)
                        questionanswer[0] = xndNode["Question"].InnerText;

                    if (xndNode["Answer"] != null)
                        questionanswer[1] = xndNode["Answer"].InnerText;

                    if (xndNode["Question"] != null)
                        questionanswer[2] = xndNode["Question"].InnerText;

                    if (xndNode["Answer"] != null)
                        questionanswer[3] = xndNode["Answer"].InnerText;
                }

              }
            }

2 个答案:

答案 0 :(得分:0)

替换:

foreach (XmlNode xndNode in xnlNodes)
{
  if (xndNode["Question"] != null)
    questionanswer[0] = xndNode["Question"].InnerText;

  if (xndNode["Answer"] != null)
    questionanswer[1] = xndNode["Answer"].InnerText;

  if (xndNode["Question"] != null)
    questionanswer[2] = xndNode["Question"].InnerText;

  if (xndNode["Answer"] != null)
    questionanswer[3] = xndNode["Answer"].InnerText;
}

foreach (XmlNode xndNode in xnlNodes)
{
  if (xndNode["Question"] != null)
    questionanswer.Add(xndNode["Question"].InnerText)

  if (xndNode["Answer"] != null)
    questionanswer.Add(xndNode["Answer"].InnerText);
}

您需要添加到列表中。

答案 1 :(得分:0)

当您第一次创建List时,它是空的,因此没有要添加的对象。您正在尝试将值设置为Array中不存在的字段。

所以: 从这里改变代码:

foreach (XmlNode xndNode in xnlNodes)
{
  if (xndNode["Question"] != null)
    questionanswer[0] = xndNode["Question"].InnerText;

  if (xndNode["Answer"] != null)
    questionanswer[1] = xndNode["Answer"].InnerText;

  if (xndNode["Question"] != null)
    questionanswer[2] = xndNode["Question"].InnerText;

  if (xndNode["Answer"] != null)
    questionanswer[3] = xndNode["Answer"].InnerText;
}

对此:

foreach (XmlNode xndNode in xnlNodes)
{
  if (xndNode["Question"] != null)
    questionanswer.Add(xndNode["Question"].InnerText);

  if (xndNode["Answer"] != null)
    questionanswer.Add(xndNode["Answer"].InnerText);

}
相关问题