XML XPath问题

时间:2011-06-26 17:40:00

标签: c# xml xpath

我的XML文件看起来像下面的内容,我正在尝试使用我的C夏普代码,只使用根据所选课程名称的名称填充组合框。因此,例如,如果他们在课程组合框中选择XML编程,它将仅在问题组合框中显示XML编程的问题。为了实现这个目标,我的XPath需要看起来像什么?任何帮助将不胜感激。

if (comboBoxCourse.SelectedItem.ToString() == selectNode.InnerText )
{
    try
    {
        XmlNodeList loadQuestions = loadDoc.SelectNodes("//Course/Questions");

        foreach (XmlNode xml in loadQuestions)
        {
            if (comboBoxCourse.SelectedItem.ToString() == selectNode.InnerText)
                comboBoxQuestions.Items.Add(xml.InnerText);
            else
                continue;
        }
    }

    catch (XmlException ex)
    {
        MessageBox.Show(ex.ToString());
    }
}
        
<?xml version="1.0" encoding="utf-8" ?>
<Courses>
    <Course>
        <Name>Direct X Programming</Name>
        <Professor>Michael Feeney</Professor>
        <Questions>Are you a Ninja</Questions>
        <Questions>What version of Direct X do we use?</Questions>
    </Course>
    <Course>
        <Name>XML Programming</Name>
        <Professor>Michael Feeney</Professor>
        <Questions>Are you an XML Ninja?</Questions>
        <Questions>What does XML stand for?</Questions>
    </Course>
    <Course>
        <Name>Windows GUI</Name>
        <Professor>Leanne Wong</Professor>
        <Questions>What is a treeview?</Questions>
        <Questions>What is a database?</Questions>
    </Course>
</Courses>

3 个答案:

答案 0 :(得分:2)

我会改用LINQ to XML:

doc.Root.Elements()
   .Where(c => c.Element("Name").Value == "Windows GUI")
   .Elements("Questions")

但如果你真的想使用XPath,它看起来像这样:

/Courses/Course[Name = 'Windows GUI']/Questions

构造查询时要小心,因为你必须从用户那里做一些字符串转义。

答案 1 :(得分:1)

这将选择并在输出窗口中显示与所选课程相关的所有问题:

string xpath = string.Format("//Course[Name = '{0}']/Questions", comboBoxCourse.SelectedItem);
foreach (XmlNode node in loadDoc.SelectNodes(xpath))
      Debug.WriteLine(node.InnerText);

要从这些结果加载另一个组合框,我将用这个替换整个方法:

string xpath = string.Format("//Course[Name = '{0}']/Questions", comboBoxCourse.SelectedItem);
foreach (XmlNode node in loadDoc.SelectNodes(xpath))
      comboBoxQuestions.Items.Add(xml.InnerText);            

答案 2 :(得分:1)

使用此XPath表达式

/*/*[Name = 'XML Programming']/Questions

这将选择任何Questions个元素,该元素是top元素的子元素的子元素,并且具有名为Name的子元素,其字符串值为'XML Programming'