我想查取路径
XmlNodeList yearRpt_nodes = docXml.SelectNodes("/Describe/Report/Year2006/ReportType") //这样写只能取到第一个节点
Year2006/ReportType  下面的所有节点集合,可是节点的ID 是变化的,请问用方法SelectNodes(XPath)中的,XPath 应该怎么写?
或是有什么其他方法?Xml 文件如下<?xml version="1.0" encoding="utf-8" ?> 
<Describe>
 <Report>
    <Year2005>
      <StaticRows Count="6" />
      <ReportType>
        <R2C3 Code="-0000" Colnum="C3" isYRpt="false" />
        <R2C4 Code="-0000" Colnum="C4" isYRpt="false" />
        <R3C3 Code="-0001" Colnum="C3" isYRpt="false" />
        <R3C4 Code="-0001" Colnum="C4" isYRpt="false" />
        <R4C3 Code="01101" Colnum="C3" isYRpt="true" />
        <R4C4 Code="01101" Colnum="C4" isYRpt="true" />
      </ReportType>
    </Year2005>
    <Year2006>
      <StaticRows Count="6" />
      <ReportType>
<R2C3 Code="-0000" Colnum="C3" isYRpt="false" />
        <R2C4 Code="-0000" Colnum="C4" isYRpt="false" />
        <R3C3 Code="-0001" Colnum="C3" isYRpt="false" />
        <R3C4 Code="-0001" Colnum="C4" isYRpt="false" />
        <R4C3 Code="01102" Colnum="C3" isYRpt="true" />
        <R4C4 Code="01102" Colnum="C4" isYRpt="true" />
      </ReportType>
    </Year2006>
 </Report>      
</Describe>

解决方案 »

  1.   

    XmlNodeList nodeList;
          XmlElement root = doc.DocumentElement;
          nodeList = root.SelectNodes("/bookstore/book/@bk:ISBN", nsmgr);
          foreach (XmlNode isbn in nodeList){
    }
    你要加foreach (XmlNode isbn in nodeList)这句啊!
    docXml.SelectNodes("/Describe/Report/Year2006/ReportType") 其实就是取所有ReportType下的节点啊!
      

  2.   

    XmlNodeList yearRpt_nodes = docXml.SelectNodes("/Describe/Report/Year2006/ReportType/text()[@Code]");Year2006/ReportType 所有节点都有共同的属性 Code ,如果通过这样的方法,XPath应该怎么取?请大家指教
      

  3.   

    XmlNodeList yearRpt_nodes = docXml.SelectNodes("//yourNode/*")用参数的:
    string ID="TreeNode1";
    XmlNodeList yearRpt_nodes = docXml.SelectNodes("//"+ID+"/*")参考资料:<?xml version="1.0" encoding="UTF-8"?>
    <HD>
     <disk name="C">
      <capacity>8G</capacity>
      <directories>200</directories>
      <files>1580</files>
     </disk>
     <disk name="D"> 
      <capacity>10G</capacity>
      <directories>500</directories>
      <files>3000</files> 
     </disk>
    </HD>你在XML文档中使用位置路径表达式来查找信息,这些表达式有很多种组成方式。结点元素的查找是你将要碰到的最频繁的查找方式。在上面这个XML文档例子中,根HD包含disk结点。你可以使用路径来查找这些结点,用正斜杠(/)来分隔子结点,返回所有与模式相匹配的元素。下面的XPATH 语句返回所有的disk元素:/HD/disk"*"代表"全部"的意思。/HD/* 代表HD下的全部节点。下面的XPATH将返回任意节点下的名称为disk的全部节点://disk下面的XPATH将返回名称为disk,name属性为'C'的全部节点:/HD/disk[@name='C']节点的附加元素,比如属性,函数等都要用方括号扩起来,属性前面要加上@号下面的XPATH将返回文件个数为1580的files节点:/HD/disk/files[text()='1580']大家注意到上面包含一个text(),这就是XPATH的一个函数,它的功能是取出当前节点的文本。下面的XPATH将返回文件个数为1580的分区:/HD/disk/files[text()='1580']/parent::*最后的parent::*表示这个元素的所有的父节点的集合。
      

  4.   

    回复:yangsongshuang(团队精神)
    XmlNodeList yearRpt_nodes=docXml.SelectNodes("/Describe/Report/Year2006/ReportType")这句,我监视了XmlNodeList ,实际上只是取了一个节点
      

  5.   

    XPath 为.//ReportType
    你看看行不
      

  6.   

    应该检验 hdt(倦怠) ,zhangweisjz(啸傲沧海) 是正确的
    yangsongshuang(团队精神) 的方法,需要单独先去singleNode 然后遍历XmlNode.ChildNodes  集合,直接去 XmlNodeList那样不行