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

本文关键字:串并 填充 列表 集合 字符串 字符 读取 xml | 更新日期: 2023-09-27 18:28:15

我需要读取xml字符串并将值分配给列表集合。我需要读取问题节点,并将其分配给列表集合变量。类似地,读取答案并将其分配给列表集合变量。目前,"问题和答案"被覆盖,不会遍历到下一个节点。有人能告诉我问题出在哪里吗?

以下是代码

 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;
                }
              }
            }

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

替换:

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);
}

您需要添加到列表中。

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

因此:更改以下代码:

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);
}