【问题标题】:unable to access elements using XPathNavigator无法使用 XPathNavigator 访问元素
【发布时间】:2016-04-19 17:18:47
【问题描述】:

我正在关注这篇文章,因为它与我的相似:* 这就是我的 XML 的外观:

<?xml version="1.0"?>
<Course name="engineering">
<Level4>
    <Module Name="electric" CreditVal="22">
        <Assignment Name="wer" Score="22" Weight="50">
        </Assignment>
        <Assignment Name="asd" Score="50" Weight="50">
        </Assignment>
    </Module>
</Level4>
</Course>

我的 xml 在一个级别中可以有 n 次模块和分配。只有3个级别。 (未包括其他两个级别)。

这是我目前获取关卡模块和作业详细信息的方式:

XPathDocument xpd = new XPathDocument("myXMLFile.xml");
        XPathNavigator xmln = xpd.CreateNavigator();



            //getting modules in level 4
            foreach (XPathNavigator mod in xpd.CreateNavigator().Select("/Level4/Module")) {
                //Accessing module elemtns
                if (mod.HasAttributes) {
                Module modtoadd = new Module();
                modtoadd.Name = mod.GetAttribute("Name", "");
                Console.WriteLine(modtoadd.Name);
                modtoadd.CreditValue = int.Parse(mod.GetAttribute("CreditVal", ""));
                Console.WriteLine(modtoadd.CreditValue);
                modtoadd.Assignments = new List<Assignment>();
                //Accessing assignment elements within the module element
                foreach (XPathNavigator asgn in xpd.CreateNavigator().Select("Course/Level4/Module/Assignment"))
                {
                    Assignment asn = new Assignment();
                    asn.Name = asgn.GetAttribute("Name","");
                    Console.WriteLine(asn.Name);
                    asn.Weighting = int.Parse(asgn.GetAttribute("Weight", ""));
                    Console.WriteLine(asn.Weighting);
                    asn.UsersScore = int.Parse(asgn.GetAttribute("Score", ""));
                    Console.WriteLine(asn.UsersScore);
                    modtoadd.Assignments.Add(asn);
                };
                courseXML.Level_41.Add(modtoadd);
            }

        };

我能够写入文件但无法读取它。在调试时,我注意到它检查了 foreach 条件,但没有验证为真,因此它没有到达 foreach 循环内的任何代码,所以很明显我的 foreach 条件有问题,但我可以看到在哪里。

【问题讨论】:

    标签: c# xml winforms


    【解决方案1】:

    尝试在表达式中添加根节点。 "/Course/Level4/Module"

    【讨论】:

    • 或以 // 开头的表达式
    • 感谢它有效 :) 不敢相信我忘记了那个基本的东西。在这上面花了太多时间:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多