Xml Linq在另一个元素之后查找元素

时间:2014-07-05 15:48:39

标签: c# xml linq

我在这里寻找这个很长一段时间,但我无法通过其他代码来解决这个问题。我需要找到最接近“user”(即“robot”)的元素并写下它的值(它取决于用户的输入)。我正在编写一个聊天机器人。这是我的XML文件:

<Answers>
<user>This is a message</user><robot>Here is an answer</robot>
<user>This is another message</user><robot>Here is another answer</robot>
</Answers>

在C#代码中我尝试这样的事情:

private static void Main(string[] args)
{
    XDocument doc = XDocument.Load("C:\\bot.xml");
    var userPms = doc.Descendants("user");
    var robotPm = doc.Descendants("robot");

    string userInput = Console.ReadLine();

    foreach (var pm in userPms.Where(pm => pm.Value == userInput))
    {
        Console.WriteLine  // robotPm.FindNextTo(pm)
    }
}

简单地说,我想比较控制台和xml中的“用户”输入,如果它们相等则从xml写入机器人的答案,负责指定的用户输入。 谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

只需使用NextNode

即可
Console.WriteLine(((XElement)pm.NextNode).Value);

但不要忘记:尽管我从未见过反例,但xml解析器并不能保证元素的顺序。更好的方法是

<item>
    <q>qusetion1</q>
    <a>answer1</a>
</item>
<item>
    <q>qusetion2</q>
    <a>answer2</a>
</item>