Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c读取XML文件时遇到问题#_C#_Xml_Xpath - Fatal编程技术网

C# 使用c读取XML文件时遇到问题#

C# 使用c读取XML文件时遇到问题#,c#,xml,xpath,C#,Xml,Xpath,我有一个结构如下的XML文件: <deftable> <table> <job jobname=""> <incond name="" /> <outcond name="" /> </job> <job jobname="">

我有一个结构如下的XML文件:

    <deftable>
        <table>
            <job jobname="">
                <incond name="" />
                <outcond name="" />
            </job>
            <job jobname="">
                <incond name="" />
                <outcond name="" />
                <incond name="" />
                <outcond name="" />
            </job>
        </table>
        <table>
            <job jobname="">
                <incond name="" />
                <outcond name="" />
            </job>
            <job jobname="">
                <incond name="" />
                <outcond name="" />
                <incond name="" />
                <outcond name="" />
            </job>
        </table>
    </deftable>

非常感谢您的帮助。

我不确定下面的代码片段对您有多大帮助,但您可以针对您的案例进行尝试,如下所示

 XDocument jobsRoot = XDocument.Load(@"C:\Jobs.xml");
 var jobData= jobsRoot.Descendants()
              .Where(it => it.Name.LocalName == "job")
              .Select(job => new
               {
                  JobName = job.Attribute("jobname").Value,
                  IncondName = job.Descendants().Where(it => it.Name.LocalName == "incond").Select(inc => inc.Attribute("name").Value),
                  OutcondName = job.Descendants().Where(it => it.Name.LocalName == "outcond").Select(inc => inc.Attribute("name").Value)
               });

我认为linq到XML的实现不如XML到动态


上面有描述(因为您提到您尝试了几种方法)。否则,上面的答案可能就可以了。

您是否使用调试器进行了调试?输出是什么?预期产量是多少?关于代码的哪一部分不起作用,你有什么线索吗?这是一个在线xpath测试仪,你给它一个文档和一个xpath:从中我推断你需要两个斜杠,如
//deftable/table
中所示,来了解如何进行。看起来你没有深入到循环中的子节点。谢谢大家的帮助。我使用两个foreach和reading-childnode访问了我想要的属性。@AlwaysLearning发布的链接真的很有帮助,我以前看过,但第一次我没有完全理解。非常感谢。
 XDocument jobsRoot = XDocument.Load(@"C:\Jobs.xml");
 var jobData= jobsRoot.Descendants()
              .Where(it => it.Name.LocalName == "job")
              .Select(job => new
               {
                  JobName = job.Attribute("jobname").Value,
                  IncondName = job.Descendants().Where(it => it.Name.LocalName == "incond").Select(inc => inc.Attribute("name").Value),
                  OutcondName = job.Descendants().Where(it => it.Name.LocalName == "outcond").Select(inc => inc.Attribute("name").Value)
               });