现有一段要解析的xml简要如下:- <dsobject classname=...>
- <props>
<prop name=...>文本</prop> 
<prop name=...>文本</prop> 
<prop name=...>文本</prop> 
</props>
- <dsobject classname=...>
- <props>
<prop name=...>文本</prop> 
<prop name=...>文本</prop> 
<prop name=...>文本</prop> 
</props>
- <dsobject classname=...>
- <props>
<prop name=...>文本</prop> 
<prop name=...>文本</prop> 
<prop name=...>文本</prop> 
</props>
</dsobject>
</dsobject>
</dsobject>现在的问题是:如何获取-->标签为<prop>,并且包含的属性name="DocumentTypeDesc"的节点?而且这个节点还要符合一个重要的前提条件:这节点,它所属的节点(离它最近的那个)- <dsobject classname=...>,里面的属性classname必须="Document"(PS:上面这一段xml只是一个局部区域,整个xml其实还有很多这样的重复写法。所以到时要用XmlNodeList存储这些得到的节点。)

解决方案 »

  1.   

    用LINQ做,学习资源如下
    http://www.cnblogs.com/luckdv/articles/1728088.html?login=1
      

  2.   

    XmlNodeList nodeList=xmlDoc.SelectNodes(string.Format("dsobject[@classname='{0}']//props//prop[@name='{1}']","Document","DocumentTypeDesc"));
      

  3.   

    写成XmlNodeList nodeList=xmlDoc.SelectNodes(string.Format("//dsobject[@classname='{0}']//props//prop[@name='{1}']","Document","DocumentTypeDesc"));就可以了,我再调试下。
      

  4.   

    但是它还是会选择-->属性classname不等于"Document"的<dsobject>元素的子节点<prop>,不知道为什么?
      

  5.   

    我找到了解决办法:namespace BinarySearch
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("XMLFile1.xml");
                foreach (XmlNode item in doc.SelectNodes("//prop[@name='DocumentTypeDesc']"))
                {
                    if (item.ParentNode.ParentNode.Attributes["classname"].InnerText == "doc")
                    {
                        Console.WriteLine(item.InnerText);
                    }
                }
            }
        }
    }
    <dsobject classname="doc">
      <props>
        <prop name="DocumentTypeDesc">文本1</prop>
        <prop name="DocumentTypeDesc">文本2</prop>
        <prop name="DocumentTypeDesc">文本3</prop>
      </props>
      <dsobject classname="exe">
        <props>
          <prop name="DocumentTypeDesc">文本4</prop>
          <prop name="DocumentTypeDesc">文本5</prop>
          <prop name="DocumentTypeDesc">文本6</prop>
        </props>
        <dsobject classname="pdf">
          <props>
            <prop name="DocumentTypeDesc">文本7</prop>
            <prop name="DocumentTypeDesc">文本8</prop>
            <prop name="DocumentTypeDesc">文本9</prop>
          </props>
        </dsobject>
      </dsobject>
    </dsobject>