我有这个XML文件:

<Main>
<QA>
    <question>What is your favorite color?</question>
    <!--pick random!-->
    <answer>Blue</answer>
    <answer>Red</answer>
    <answer>Green</answer>
    <answer>Yellow</answer>
</QA>

<QA>
    <question>What is your favorite programming language?</question>
    <!--pick random!-->
    <answer>PHP</answer>
    <answer>C#</answer>
    <answer>Java</answer>
    <answer>VB.Net</answer>
</QA>

我想当用户输入上面xml文件中指定的问题之一时,程序从节点中选择一个随机的答案。 例如,当用户输入“您最喜欢的编程语言是什么?”时 在TextBox中,程序必须随机生成PHP,C#,Java或VB.Net。

这是我的代码,但不正确:

XmlDocument xml = new XmlDocument();
xml.Load("QA.xml");

XmlNodeList xList = xml.SelectNodes("Main/QA");
foreach (XmlNode xn in xList)
{
    string Question = xn["question"].InnerText;
    if (Question == txtQuestion.Text)
    {
        XmlNodeList answerlist = xml.SelectNodes("Main/QA/answer");
        foreach (XmlNode ans in answerlist)
        {
            Console.WriteLine(ans.InnerText);
        }
    }
}  

输出:

蓝红绿黄PHP C#Java VB.Net

请帮忙。

#1楼 票数:2

使用Linq To Xml,

Random rnd = new Random();
var xDoc = XDocument.Load("QA.xml");

var question = xDoc.Descendants("QA")
                   .First(d => d.Element("question").Value == txtQ.Text);

var answer = question.Elements()
                     .Skip(rnd.Next(0, question.Elements().Count()))
                     .First().Value;

#2楼 票数:2 已采纳

尝试这个:

XmlDocument xml = new XmlDocument();
xml.Load("QA.xml");

XmlNodeList xList = xml.SelectNodes("Main/QA");
foreach (XmlNode xn in xList)
{
    string Question = xn["question"].InnerText;
    if (Question == txtQuestion.Text)
    {
        XmlNodeList answerlist = xn.SelectNodes("./answer");
        foreach (XmlNode ans in answerlist
            .Cast<XmlNode>()
            .OrderBy(elem => Guid.NewGuid()))
        {
            Console.WriteLine(ans.InnerText);
        }
    }
} 

  ask by reza translate from so

未解决问题?本站智能推荐:

1回复

C#-为列表选择随机项目,概率一开始就下降了1个元素

我的随机零件代码是: public Gun GetRandomGun(IEnumerable<Gun> sequence, Random random) { int totalWeight = sequence.Sum(p =
2回复

System.IO.DirectoryNotFoundException:在针对XSD验证XML时

我有一个用C#编写的程序,可以根据模式验证XML文件。 有时,当我调用xmlSchemaCollection.Add(null, schemaFileName) ,其中xmlSchemaCollection是XmlSchemaCollection而schemaFileName是我得到的模式
1回复

挣扎于C#,在生成器中读取XML

我放弃在Excel中执行此操作,因此制作了一个XML文件(名为“ ideas.xml”),如下所示: 我正在尝试制作一个生成这样的随机动词,形容词和名词的生成器。 这是我正在努力的一块: 我正在尝试向输出中添加随机化器,但似乎无法正确处理。 另外,我打印出数组中的第一个值只是
3回复

更改具有相同名称的XML节点?

大家! 我有一个XML文件,需要更改节点的值,特别是指示的行。 我的问题是,正如您所看到的,有很多节点。 我如何更改这条线? 这个XML文件可能更大,所以我正在寻找一种解决方案,该方案将考虑不同数量的“ launch.file”节点。 需要设置为True的节点将由相应的NAME
1回复

解析具有相同名称的Xml节点

当我尝试解析这个xml时遇到问题 我的程序只读了第一个ActivateOnEquip,但我想让它全部读完。 这是我的计划: 控制台只写入Attack : 2但我想要这个
1回复

从具有相同名称的节点读取XML节点属性值

我的XML看起来像这样: 如何从两个具有相同名称的不同节点读取两个不同的Local Position X属性值? 编辑 抱歉,忘记添加我从一个屏幕节点读取单个本地位置属性值的代码:
2回复

在C#中选择具有相同名称但不同属性内部文本的XML节点

我需要选择title和status 。 这是我想出的: 这给出了System.NullReferenceException: Object reference not set to an instance of an object. 但是在选择线上。 我不确定如何选择节点。
1回复

修改xml,具有相同名称的子节点

我正在尝试修改xmlString,以便可以动态创建数据集。 xml看起来像这样: 使用dataset.ReadXML(xmlReader)创建数据集时的问题是两个具有相同名称“ a-descript”的节点。 有没有一种快速的方法来修复此xml,以便节点获得唯一的名称。 即:a